我正在尝试编写一个函数来将文本输入分配给char**
。每个单词存储在char*
中。当我这样做时,我收到了错误,我认为我没有分配足够的内存,所以我写了一个小测试程序。C - 字符的内存大小指针
#include <stdio.h>
#include <stdlib.h>
int main(){
char **input=NULL;
char **help=NULL;
for(int i=1;i<300;i++){
help=realloc(input,i*(sizeof(char*)));
if (!help)
return 0;
input=help;
input[i]="test";
}
return 1;
}
现在这工作得很好,但是当我给每个字符分配如下。
#include <stdio.h>
#include <stdlib.h>
int main(){
char **input=NULL;
char **help=NULL;
char *help2=NULL;
for(int i=1;i<300;i++){
help=realloc(input,i*(sizeof(char*)));
if (!help)
return 0;
input=help;
for (int j=1;j<5;j++){
help2=realloc(input[i-1],j);
if (!help2)
return 0;
input[i-1]=help2;
input[i-1][j-1]='t';
}
}
return 1;
}
我得到了第14行的段错误。我认为这是因为input
没有足够的空间。但由于字符的大小是一个,我用sizeof(char*)
我看不出它是不够的。我需要分配多少内存,为什么在我的第一个例子中工作?谢谢!
不能保证你在外部指针数组的初始'realloc'中留出空间的指针实际上是* determinate *。将它传递给* inner *循环中的'realloc'是未定义行为的理由。总之,对于'realloc(input [i-1],j)'input [i-1]的初始值是不确定的;使用它有*坏*。 – WhozCraig