2017-11-04 3 views
1

ファイルからテキストを取得する関数を作成しましたが、いくつかの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 

私はまだメモリ割り当てを使い慣れていないので、これは私を混乱させます。

+0

私はforループが正しくないと思っています...あなたは3つの文字をkeyに割り当て、3つの文字を定義からそれにコピーします。したがって、キーはnullで終了しません。ヌルターミネータを保持するために余分な文字を割り当てる必要があります。 – bruceg

答えて

2

defn[i-x] = definition[i];が最初に評価されるとき、xは値i+1を持つので、i-xは-1です。

+0

'i - (i + 1)'は間違いなく-1 – bruceg

+0

です。それは私の面でかなり恥ずかしいです。乱雑な制御の問題として、誰かがこれが有用であるとは考えにくいと考えて、この質問を削除すべきですか? –

+0

似たようなミスをしているかもしれないので、残しておきます – bruceg

関連する問題