文字列のリストを入力しようとしています。リストは長さが異なる可能性があるので、動的割り当てを使用しようとします。各文字列は最大20文字です。リストは1つのドットで終わります。私はしばらくの間それに取り組んできましたが、私はセグメンテーションの失敗を続けています。なぜ私は分かりません。私はエラーが私のrealloc/mallocの使用にあると思うが、私はちょうど私が間違ってやっているのか分からない。コードブロックは大規模なプログラムの一部ですが、私はこのブロックを選んで動作させようとしています。それは1つの単語の "リスト"の後にドットが続くようにうまく動作します。 2つ以上の文字列のリストを読み込もうとすると、セグメント化エラーが発生します。 お手数をお掛けします。ありがとうございます!cで動的割り当てを使用している文字列のリストを入力
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char **resizeDynamicArray(char **arr, int newSize){
char **ptr = realloc(arr, newSize*sizeof(char*));
if (ptr==NULL) {
printf("Error: memory allocation failed.\n");
exit(-1);
}
return ptr;
}
int input (char ***seq){
int len = 0;
char string[21];
*seq=NULL;
do{
scanf("%s", string);
if (string[0] != '.'){
*seq = resizeDynamicArray(*seq, (len+1));
*seq[len] = malloc(sizeof(char[21]));
strcpy((*seq)[len], string);
len++;
}
} while (string[0] != '.');
return len;
}
int main(int argc, char *argv[]) {
int length;
char **words;
length = input(&words);
for (int i=0; i<length; ++i){
printf("%s\n", words[i]);
}
for (int i=0; i<length; ++i){
free(words[i]);
}
free(words);
return 0;
}
3つ星のプログラマーは、自分のプログラムをデバッグできるはずです。 – EOF
['gdb'](http://www.gnu.org/software/gdb/documentation/)をご覧ください –
EOFにはまったく役に立ちません。私は「3つ星のプログラマー」にはほど遠いです。私はコーディングとコースatmを取るのが初めてです。ありがとうパトリック、私はすでにそれを解決しました。私はとにかくそれを見てみましょう。 – Matt