所以我已经看到了一些与此相关的问题,但没有一个真正过于描述或者向我解释 所以我试图改变字符串数组中的字符串数量,例如array [3] [155] realloc()到数组[4] [155] 创建4个字符串,每个字符串包含155个字符,然后可以通过fgets(array [4],155,stdin)进行修改; 然后打印出新数组
我的尝试
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main () {
int arrays = 3;
int pnm = 0;
char array[arrays][155]; //Default size is 3 you can change the size
strcpy(array[0], "Hello from spot 0\n");
strcpy(array[1], "Sup from spot 1\b");
strcpy(array[2], "Sup from spot 2");
while(pnm != arrays) {
printf("Word %d: %s", pnm, array[pnm]);
pnm++;
}
realloc(array, 4);
strcpy(array[3], "Sup from spot 3!");
printf("The array is now.\n");
pnm = 0;
while(pnm != 4) {
printf("%s", array[pnm]);
pnm++;
}
}
在控制台输出中
bash-3.2$ ./flash
Word 0: Hello from spot 0
flash(1968,0x7fff70639000) malloc: *** error for object 0x7fff5828f780: pointer being realloc'd was not allocated
*** set a breakpoint in malloc_error_break to debug
Word 1: Sup from spot Word 2: Sup from spot 2Abort trap: 6
bash-3.2$
答案 0 :(得分:1)
您收到的错误消息非常好:
pointer being realloc'd was not allocated
如果要使用realloc
,则需要传递NULL指针或使用malloc
或realloc
等函数动态分配的指针。您传递的指针是存储在堆栈中的数组,该数组与堆不同,并且没有重新分配功能。
我也看到你用{4}的参数调用realloc
。realloc
函数无法知道数组的结构或它的元素有多大,所以你需要通过你需要的字节数。
此外,您需要将realloc
返回的指针存储在某处,最好是在检查它不是NULL之后。如果realloc返回非NULL指针,则应该忘记传递给它的原始指针。