我正在嘗試編寫一個函數來將文本輸入分配給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