我正在尝试使用realloc函数来扩大数组,以便用户输入更多的名称。当我添加第五个元素时,它会给出一个错误,例如: * glibc detected ./a.out: realloc(): invalid next size: 0x00000000017d2010 ** 以下是代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void){
char **mtn = NULL;
char x[30];
int i = 0;
while ( strcmp(gets(x), "finish") ){
mtn = realloc( mtn, i*sizeof(char) );
// mtn[i] = realloc( mtn[i], sizeof(x) ); // tried but didnt work
mtn[i] = x;
i++;
}
puts(mtn[1]);
return 0;
}
realloc(mtn,(i + 1)* sizeof(char *))
。注意也更改了sizeof(char *)
。 - Jonathan Lefflergets()
。在使用gets()
之前,请检查其返回值。此外,您还应该检查realloc()
的返回值。puts(mtn[1])
似乎也有点武断。您需要使用strcpy()
来复制字符串;您需要为字符串分配空间(以及指向字符串的指针,您目前正在执行此操作)。 - Jonathan Lefflerchar*
指针数组中拥有 N 个相同地址的副本吗?如果不是,你必须为实际的 字符串 分配一个新的缓冲区。 - WhozCraiggets
……每个问题本身都可以成为一个好的、紧凑的问题,但是一起来看,我真的不知道“从哪里开始”,就是这样 :-) - Kerrek SB