私のコードで問題がわからないとき。このプログラムの目的は、テキストファイルから単語を読み取り、リンクされたリストに追加することです。これを実行すると、次のようになります。文字列を解放しようとしたときに無効な次のサイズ(速い)
static char *make_string(char buffer[], int length) {
char *str = (char *)(malloc(length+1));
memcpy(str, buffer, length);
str[length + 1] = '\0';
return str;
}
char *words_next_word() {
char buf[MAXBUF] = {0};
int character = getchar();
int index = 0;
static int count = 0;
printf("it is the %d word \n", count);
count++;
while(isalnum(character) == 0){
character = getchar();
}
while(character != EOF && isalnum(character) != 0){
buf[index] = character;
index++;
character = getchar();
}
return make_string(buf, index);
}
テキストファイルから単語を取得した後、リンクリストに追加します。単語を追加した後、私は文字列を解放します。最初の138語が読み込まれ、問題なく解放されます。何らかの理由で、138番目の単語を読み込もうとするとプログラムがクラッシュしますが、その理由はわかりません。
ヒントへの書き込みを制限するものではありません: ''ちょうど戻りstrの前に 'STR [長さ]の値がどのようなものですか;'? – chux
'str [length + 1] = '\ 0';'境界外の書き込み、未定義の動作です。 – EOF
このコードが138番目の単語ではなく、138番目の単語で機能する理由はありますか? –