ファイルからテキストを取得する関数を作成しましたが、いくつかのcalloc'dメモリを解放しようとしたときに問題が発生しました。callocされたメモリを解放するときにエラーが発生しました:フリーで無効な次のサイズ(高速)
ye. wee.\n
上記とtxtファイルが渡された場合、関数はがたの3つの文字の文字のためにメモリを割り当てます。それらをコピーします。次に、他の6文字のメモリを割り当ててコピーします。次に、それぞれの文字列を出力してメモリを解放します。
testFor()は、最初の '。'のインデックスを返す関数です。文字列で
私はgdbのプログラムを調べましたが、free(key)を押すとsegfaultが次のようになりますerror(残念ながら、まだ画像を埋め込むことはできません)。
//more above
while ((fgets(line, 256, source_fp)) != NULL) {
if (line[0] == '\n') {
if (pflag) {
int first = testFor(definition);
int second = strlen(definition);
printf("%d %d\n", first, second);
key = calloc(first + 1, sizeof(char));
defn = calloc((second - (first + 1)), sizeof(char));
for (i = 0; i < (first + 1); i++) {
key[i] = definition[i];
}
int x = i + 1;
for (; i < second; i++) {
defn[i-x] = definition[i];
}
printf(">%s<\n", key);
printf(">%s<\n", defn);
free(key);
free(defn);
}
//more
私はまだメモリ割り当てを使い慣れていないので、これは私を混乱させます。
私はforループが正しくないと思っています...あなたは3つの文字をkeyに割り当て、3つの文字を定義からそれにコピーします。したがって、キーはnullで終了しません。ヌルターミネータを保持するために余分な文字を割り当てる必要があります。 – bruceg