char**
にテキスト入力を割り当てる関数を記述しようとしています。各単語がchar*
に格納されている場所。私がこれをしていたときに私はエラーが発生していたので、私は少しのテストプログラムを書いたので、私は十分なメモリを割り当てていないと思った。C - メモリサイズのポインタ
これはうまく動作しますが、文字ごとに次のように割り当てます。
#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;
}
私はinput
は十分なスペースを持っていないためであると考えライン14上のセグメンテーションフォールトを取得します。しかし、キャラクターのサイズが1であり、私はsizeof(char*)
を使用したので、それがいかに不十分かはわかりません。どのくらいのメモリを割り当てる必要があり、私は最初の例でそれがうまくいったのですか?ありがとう!
外側ポインタ配列の最初の 'realloc'に余裕を持ったポインタが実際に*確定*しているという保証はありません。 * inner *ループの 'realloc'に渡すと、*未定義の動作*の根拠になります。つまり、 'realloc(input [i-1]、j)'の 'input [i-1]'の初期値は不定です。それを使って*悪い*があります。 – WhozCraig