1. ホーム
  2. スクリプト・コラム
  3. その他

[解決済み] realloc(): char *のstrcatのためのスペースを作るために再割り当てするとき、次のサイズが無効です [重複].

2022-01-02 02:38:27

質問

以下のコードでinvalid memory errorが発生します。

プレ printf(" %s\n","FINE 5"); printf("%s LENGTH IS: %d\n","FINE 6",strlen(": ")); buffer = (char *)realloc(buffer, strlen(buffer)* sizeof(char) + (strlen(": ")+1)* sizeof(char)); printf(" %s\n","FINE 7"); strcat(buffer, ": \0");

出力する。

FINE 5
fine 6 長さは: 2
* glibc が検出されました。 ./auto: realloc(): invalid next size: 0x08cd72e0 ***. ======= バックトレース: ========== /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x6dd591].

ここで注意すべき点は FINE 5 が印刷されることはありません。また、すべての実行で無効な次のサイズエラーが同じ場所に発生します。

発見 これ 重要

解決方法

このエラーは、あなたのコードの他の部分がヒープを破損したために発生します。そのエラーが何であるかは、コードの残りの部分を見なければわかりません。

というのは FINE 6 LENGTH IS: 2 が印刷されていないことから、次のことがわかります。 * glibc detected * ./auto: realloc(): invalid next size: 0x08cd72e0 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x6dd591] が失敗しています。その失敗の原因はきっと Fine 7 が無効なのは、実行の初期にヒープが破壊されたためです。


あなたの実際の問題とは直交しています。 {コード は {コード {コード を定義しているので、コードから削除するのは理にかなっています。