我的malloc調用有問題。我有以下代碼:Malloc更改C中的值
int** parseEntireFile(int *sizeArray)
{
FILE * fp;
char buffer[5000];
int size = 0;
int a,b,c;
int res;
int **someArray;
fp = fopen("input.txt","r");
while (fgets(buffer,sizeof(buffer),fp)!= NULL)
{
size++;
}
fclose(fp);
fp = fopen("input.txt","r");
someArray = malloc(sizeof(int) * size);
size = 0;
while(fgets(buffer, sizeof(buffer), fp) != NULL) {
res = sscanf(buffer, "%d%d%d", &a, &b, &c);
if (res == 3)
{
someArray[size] = malloc(sizeof(int*) * 500);
someArray[size][0] = a;
someArray[size][1] = b;
someArray[size][2] = c;
}else if (res == 2) {
someArray[size] = malloc(sizeof(int*) * 500);
someArray[size][0] = a;
someArray[size][1] = b;
someArray[size][2] = 0;
} else if (res == 1) {
printf ("1 value %d\n", a);
} else
{
printf ("0 values\n");
}
size++;
}
*sizeArray = size;
return someArray;
}
所有這一切工作正常,但在我的主,我宣佈結構指針數組和malloc的那樣:
struct allData **certainData;
certainData = malloc(sizeof(struct allData) * size);
當我這段代碼添加到我的節目休息的程序打印的是錯誤的值,但是當我把malloc拿出來的時候就好了。有人知道問題出在哪裏嗎?
'someArray'是一個int *數組,指向int的指針。因此,你應該分配'size * sizeof(int *)'; 'size * sizeof(int)'可能太小了。相反,您對'someArray [i]'的分配應基於sizeof(int)'。 (一個好的模式是做類似'p = malloc(n * sizeof(* p))'的東西,其中正確的類型是從'p'指向的東西派生的。) –