私は** lineという名前のポインタ配列を持っています。各行の長さは100文字です。なぜreallocは2つの異なるポインタを作成しますか?
そして、任意の行に文字を追加し、それが十分な大きさでなければラインを再割り当て機能を持っている:
void add_letter(char *line, int pos, char letter) {
if(strlen(line) % 100 == 0){
line = realloc(line, sizeof(char) * strlen(line) + 100);
}
...
add_letter
は、このように呼ばれている。ここで
add_letter(lines[0], pos, ch);
ラインに等しいですlines[0]
となり、2行目では、p line == lines[0]
の場合、gdbは1
を返します。 ここでline
とlines[0]
は両方ともメモリロケーション0x6465e0
にあります。
しかしrealloc
呼び出した後、line
は0x648200
になりますが、同じでlines[0]
滞在と""
空の文字列になります。
realloc
はこのように動作する原因は何ですか?この理由により、最後の結果であるstrcat(line, newline)
,newline
は機能終了時に機能しません。
に役立ちます「何がこのように行動する 'realloc'の原因は?」ええと...それはまさに 'realloc'のやり方です!それが 'realloc'の目的です。一般的には、* new *メモリ位置に* new *メモリブロックを割り当てます。それ以外のどのように行動すると思いましたか? – AnT
私はCを使用していません。C++ではありません。 – razorx
@AnTしかし、それは行[0]を変更せずに行を変更しますが、それらは同じことです。 – razorx