【发布时间】:2017-03-11 22:05:24
【问题描述】:
我知道每次添加项目时都使用 realloc 是个坏主意,但我只是想在这里学习内存管理。为什么这个程序会崩溃?
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "some text";
char **stringList = (char**) malloc( sizeof(char*));
for (int n=0;n<15;n++){
stringList[n] = (char*) malloc( (strlen(str)+1) );
strcpy(stringList[n], str);
stringList=realloc(stringList, (n+2) * sizeof(char*));
n++;
}
return 0;
}
【问题讨论】:
-
有no need 将调用结果转换为
malloc()。 -
你在循环中写了
n++。这意味着n将随着每次循环迭代增加 2。这是一个错误吗? -
每次重新分配就可以了
-
@BrandonIbbotson 这肯定是一个错误,因为第一个
realloc分配2行,然后stringlist[2] =写入越界 -
这种代码的正常结构是在 向新元素中添加内容之前执行
realloc()。
标签: c multidimensional-array realloc