C语言 使用 malloc 和 free:无效的下一个大小错误



我对malloc和free的使用感到困惑,这是我的示例和代码:

为了清楚起见,假设我们要从文件中读取行并写入数组。文件的格式为:

3
abc
def
ghi
jkl
mno
pqr

我想将前三行存储到 array1 中,并将其余的放入 array2 中。

代码:

int num;
FILE *fin = fopen("filename", "r");
/*Read the first line of the file*/
fscanf (fin, "%d", &num);
char **array1 = malloc(sizeof(char *) * num);
char **array2 = malloc(sizeof(char *) * num);
/*Apply sizeof(num * num) memory blocks and set the first address to array1[0]*/
array1[0] = malloc(sizeof(char) * num * num);
array2[0] = malloc(sizeof(char) * num * num);
/*Allocate the address of each (char *) array pointer*/
int i;
for (i = 0; i < num-1; i++)
{
    array1[i+1] = array1[i] + num;
}
for (i = 0; i < num; i++)
{
    fscanf(fin, "%s", array1[i]);
}

调用free函数时出现问题:

/*ERROR: free(): invalid next size (fast): 0x0804b318(gdb)*/
free(array1[0]);
free(array1);

由于地址0x0804b318是 array1[0],我认为分配的内存块可能不够。要使其更大:

array1[0] = malloc(sizeof(char) * (num+1) * (num+1));

它奏效了,但我对此感到困惑,因为文件的前 3 行是:

abc
def
ghi

malloc 函数返回一个指向 3 * 3 个字符数组的指针,该数组足以存储
这3条线,为什么我们需要(3+1(*(3+1(?

字符串

与终止''字符一起存储,这也占用了空间。因此,要存储 3 个字符的字符串,您需要容纳 4 个字符的空间。

相关内容

  • 没有找到相关文章

最新更新