在 C 中重新分配一个二维数组
Reallocating a two-dimensional array in C
所以我看到了一些与此相关的问题,但是 none 描述性太强了,或者对我来说解释得很好
所以我正在尝试更改字符串数组中的字符串数量,例如 array[3][155]
重新分配()到数组[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$
您收到的错误消息非常好:
pointer being realloc'd was not allocated
如果您要使用 realloc
,您需要向它传递一个 NULL 指针或使用 malloc
或 realloc
等函数动态分配的指针。你传递的指针指向的是一个存放在栈上的数组,它与堆不同,没有重新分配的特性。
我还看到您在调用 realloc
时参数为 4。realloc
函数无法知道您的数组结构或其元素有多大,因此您需要传递您想要的字节数。
此外,您需要将realloc
返回的指针存储在某个地方,最好是在检查它不是NULL 之后。如果重新分配 returns 一个非 NULL 指针,您应该忘记传递给它的原始指针。
所以我看到了一些与此相关的问题,但是 none 描述性太强了,或者对我来说解释得很好 所以我正在尝试更改字符串数组中的字符串数量,例如 array[3][155] 重新分配()到数组[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$
您收到的错误消息非常好:
pointer being realloc'd was not allocated
如果您要使用 realloc
,您需要向它传递一个 NULL 指针或使用 malloc
或 realloc
等函数动态分配的指针。你传递的指针指向的是一个存放在栈上的数组,它与堆不同,没有重新分配的特性。
我还看到您在调用 realloc
时参数为 4。realloc
函数无法知道您的数组结构或其元素有多大,因此您需要传递您想要的字节数。
此外,您需要将realloc
返回的指针存储在某个地方,最好是在检查它不是NULL 之后。如果重新分配 returns 一个非 NULL 指针,您应该忘记传递给它的原始指针。