我是编码初学者,我的代码有问题。请指教。
输入:-
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
int *list = malloc(3 * sizeof(int));
if (list == NULL)
{
return 1;
}
list[0] = 1;
list[1] = 2;
list[2] = 3;
for (int i = 0; i < 3; i++)
{
printf("%i\n", list[i]);
}
int *tmp = realloc(list, 4 * sizeof(int));
if (tmp == NULL)
{
free(list);
return 1;
}
free(list);
tmp[3] = 4;
list = tmp;
for (int i = 0; i < 4; i++)
{
printf("%i\n", list[i]);
}
free(tmp);
}
输出:-
1
2
3
1628405245
5
-136327152
4
我有一个问题,free(list);
如果我删除它,那么代码似乎工作正常,
但如果我这样做(这是在 CS50 的讲座中完成的)
tmp[3] = 4;
free(list);
然后错误来了
1
2
3
1508201014
5
1428381712
21918
free(): double free detected in tcache 2
zsh: abort ./list1
请问这是为什么?