文字列を取り込んで特定の文字のインデックスを計算し、そのインデックスに別の構造体ポインタを割り当てるオートコンプリート機能の最初の部分を実装しようとしています。また、可能な補完文を文字列配列に格納します。なんらかの理由で、文字列配列フィールドにアクセスしようとするとプログラムがクラッシュし、その理由がわかりません。これをどうすれば解決できますか?構造体内の配列にアクセスするときにプログラムがクラッシュする
おかげ
struct table {
struct table *next[26];
char **complete;
int lastIndex;
int size;
};
static struct table Base={{NULL},NULL,0,0};
void insert(const char *string){
int index=string[0]-'a';
if(Base.next[index]==NULL){
Base.next[index]=(struct table*)malloc(sizeof(struct table));
*Base.next[index]=(struct table){{NULL},NULL,0,0};
}
struct table *pointer=Base.next[index];
if(pointer->lastIndex==pointer->size){ //expand complete array
pointer->complete[pointer->lastIndex] = strdup(string); //program crashes here
pointer->lastIndex=pointer->lastIndex+1;
}
}
奇妙な動作は、間違ったメモリ操作によって引き起こされる未定義の動作から生じることがよくあります。 **アクセス違反**(セグメント違反)が発生した場合は、[Valgrind](http://valgrind.org)や[AddressSanitizer](https://clang.llvm.org/docs/AddressSanitizer)などのツールを試してみてください.html)を使用して問題の根本を特定します。 「クラッシュ」という言葉を定義することを忘れないでください。 –
'pointer-> complete [pointer-> lastIndex]': 'pointer-> complete'は' NULL'です。逆参照することはできません。 – BLUEPIXY
構造体を割り当てるときは、table.completeを割り当てていません。これは/ someポインタへのポインタであるため、pointer-> complete [n]のように、pointer-> completeは未定義です。 – Mike