ich manchmal Fehler erhalten, wenn Sie diesen Code ausführen:Was ist los mit meinem C-Code (Meine Ausgabe ist wegen malloc flüchtig)?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int digits(int n){
int count = 0;
while(n!=0)
{
n/=10; /* n=n/10 */
++count;
}
return count;
}
int fib(int n){
int r;
if(n == 1 || n == 0)
return 0;
else if(n == 2)
return 1;
r = fib(n-1) + fib(n-2);
return r;
}
void function(void){
char* test; //number you want to scan
int* table;
int length, length2, test2 = 0, number, l, random = 0, j = 1, buffer;
test = malloc(sizeof(test));
table = malloc(sizeof(table));
scanf("%s", test);
number = atoi(test);
length = strlen(test); //length of input test number
while(test2 < length + 1){
printf("fib(%d) = %d\n", j, fib(j));
buffer = table[j - 1] = fib(j);
test2 = digits(buffer);
j++;
}
//input size of "table" into "length2"
length2 = j - 1;
for(l = 0; l < length2; l++){
if(table[l] == number){
printf("YES\n");
random = 1;
break;
}
}
if(random == 0)
printf("NO\n");
free(table);
free(test);
}
int main(void){
int num, i;
scanf("%d", &num);
for(i=0; i < num; i++){
function();
}
return 0;
}
Und dies ist die Ausgabe:
3
2
fib(1) = 0
fib(2) = 1
fib(3) = 1
fib(4) = 2
fib(5) = 3
fib(6) = 5
fib(7) = 8
fib(8) = 13
YES
*** Error in `./Am_I_a_Fibonacci_Number': free(): invalid next size (fast): 0x08384018 ***
Aborted (core dumped)
erste Zahl ist, wie viel Input, der Benutzer möchte zählen (in diesem Fall 3) und Die 2. (in diesem Fall 2., 3. und 4.) Zahl ist die Nummer, die Sie testen möchten, ob es sich um eine Fibonacci-Nummer handelt oder nicht. Entschuldigung, wenn das sehr schwer zu lesen ist, muss ich viel lernen.
Sie sind nicht "malloc" eine richtige Menge an Speicher. Zugewiesene Beträge sollten etwas wie "sizeof (char) * somesize" und "sizeof (int) * anothersize" sein; Jetzt reservieren Sie gerade genug, um Ihren Zeiger zu speichern. –
Sie müssen auch nicht wirklich malloc in diesem Programm verwenden. –
@AnttiHaapala Danke! Jetzt verstehe ich. Wenn ich es so schreibe, weise ich einen Speicherblock zu, der der Größe meines POINTERs entspricht, nicht die tatsächliche Größe der Dinge, die ich im Speicher speichern möchte, auf die die Variable zeigt. – IronEdward