【发布时间】:2013-11-28 16:42:28
【问题描述】:
我正在尝试创建动态字符串数组作为读取文件的缓冲区。关键是数组必须以给定的大小声明,但如果文件包含的行数超过缓冲区大小,则必须调整大小。我创建的缓冲区如下所示:
#define N 32
char **array = (char**) malloc((N+1)*sizeof(char*));
当涉及到重新分配时,我已经尝试过这种方式:
array = (char**) realloc(array, (2*N+1)*sizeof(char*));
但不幸的是,它会导致堆损坏。我应该如何正确地做到这一点?
【问题讨论】:
-
问题可能出在您使用 char** 而不是 char* 的事实;如果您为二维数组动态分配内存,那么您做错了。
-
如何为字符串创建动态数组?
-
如果你想要一个字符串数组,使用 char** 没有问题。但是,您的重新分配只会工作一次(因为大小是硬编码的),并且您使用 realloc() 的方式不能正确处理故障。也许你自己设置字符串的方式有问题?
-
你做得对,你确定堆损坏在
realloc行吗? -
从内存分配函数获取值时不需要强制转换。
标签: c arrays visual-studio-2010