Malloc在C中更改值

时间:2016-03-10 18:18:19

标签: c pointers memory struct

我的malloc电话有问题。我有以下代码:

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;
}

所有这一切都很好,但在我的主要部分我声明了一个struct指针数组和malloc它:

struct allData **certainData;
certainData = malloc(sizeof(struct allData) * size);

当我将这段代码添加到我的程序中时,程序的其余部分会打印错误的值,但是当我把malloc取出它的罚款时。有人知道问题出在哪里吗?

2 个答案:

答案 0 :(得分:1)

 someArray = malloc(sizeof(int) * size);

应该是

 someArray = malloc(sizeof(int*) * size);

可能你的平台有sizeof(int *)!= sizeof(int)。

答案 1 :(得分:-1)

someArray = malloc(sizeof(int) * size); 不应该编译。 malloc应该返回void*,所以你应该抛出它。

另外,就像评论所说的那样,应该分配一个指针数组。

如果指针大于整数,就像典型的64位构建一样,那么你将超越someArray并写入堆栈中的其他内容。所以你应该期待错误的值,certainData被粉碎等等。