【发布时间】:2014-08-14 05:11:36
【问题描述】:
我正在尝试学习 c 的内存管理。
我为
分配了内存1. char** a
2. char** b
3. char* b[0] ~ b[99]
和
我释放了内存
1. char** a
2. char* b[0] ~ b[99]
3. char** b
但是,我在第 33 行遇到错误,即free(b[0])
为什么会产生invalid next size free (fast)?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char** a = (char**)malloc(100 * sizeof(char*));
a[0] = "Hello Again!";
char** b = (char**)malloc(100 * sizeof(char*));
int i = 0;
for(i = 0; i < 100; i++){
b[i] = (char*)malloc(10 * sizeof(char));
}
strcpy(b[0], *a);
free(a);
printf("%s", b[0]);
for(i = 0; i < 100; i++){
free(b[i]);
}
free(b);
return 0;
}
【问题讨论】:
-
这是什么原因?
-
另请注意,
sizeof(char)指定始终为1。 -
@PeterHwang 你没有点击链接吗?