以下は'E'
が入力されるまで未知数の単語を入力するコードです。入力したすべての単語を停止して印刷する必要があります。ただし、このプログラムを実行すると、セグメント化エラーが発生します。私は持ってはいけないメモリにアクセスしましたか?は、配列ワードを出力する際にセグメンテーションエラーを受け取ります
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CAPACITY 10
#define NUM_OF_WORDS 10
int main(void)
{
int num_words = 10;
char *word= malloc(CAPACITY*sizeof(char));
char **w=(char **) malloc(num_words*sizeof(char));
int i;
for(i = 0 ; scanf("%s", word)==1; ++i)
{
if(*word == 'E')
break;
if(i == num_words-1)
w = (char **)realloc(w, (num_words *=2) * sizeof(char));
w[i] =(char *) malloc(strlen(word)+1 * sizeof(char));
strcpy(w[i], word);
}
int x = 0;
for(x = 0 ; x<num_words ; x++)
printf("%s", w[x]);
return 0;
}
は、それがどのような入力をクラッシュさせ、そして何行に:私はあなたが使用したほうが良いと思いますか? –
@JohnZwinckが正しいです。 "私はセグメンテーションエラーを受け取りました"あなたがそれをどのようにテストしたか分からなければ、あまり役に立ちませんか?すぐにクラッシュしますか?特定の入力後?デバッガで実行しましたか? – abelenky
私はデータの入力を止め、プログラムが何かを印刷するはずだったとき、私はsegを受け取りました。 'printf' for for'ループのエラー –