[解決済み】メモリー・クロバリング・エラー
2022-01-31 20:01:37
質問内容
私は小さなコードを持っています。私はそれを
-lmcheck
同じようなエラーが発生するコードをデバッグしようとしているためです。
このコードを実行すると、このエラーが発生します。
memory clobbered before allocated block
の理由を説明してください。
free(ptr)
がこのエラーを投げるのでしょうか?
他にどのようにポインタを解放すればよいのでしょうか?
ありがとうございます。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#define LEN 5
int main(int argc, char *argv[]){
char *ptr = NULL;
ptr = (char *) malloc(LEN+1);// +1 for string
strcpy(ptr, "hello");
int i = 0;
for(i = 0; i<LEN; i++)
{
printf("ptr[%d] = %c\n", i, ptr[i]);
ptr++;
}
free(ptr);
return 0;
}
解決方法は?
インクリメントしている
ptr
したがって、それが指すアドレスが変更されます。そんなことはできません。
あなたの場合、別のポインタ、たとえば
char * p = ptr
で操作し
p
退出
ptr
ができるように、そのまま
free(ptr)
を後回しにする。
EDIT
あなたのコードをもう一度見てみると、あなたがやっているのは
ptr++
ということです。配列内の文字にアクセスする際に
ptr[i]
をいじると
ptr
ポインタを使用する場合、ベースアドレスを変更し、文字にアクセスする際に
ptr[i]
は、予期せぬ結果を導く可能性がある(と思われる)。
単純にその行を削除すると(
ptr++
というように、あなたのコードは魔法のように動きます。
もし、ポインタの概念を探求し、別の解決策を試したいのであれば、コードは次のようになるはずです。
int main(int argc, char *argv[]){
char *ptr = NULL;
char * p;
ptr = (char *) malloc(LEN+1);// +1 for string (please check for NULL)
p = ptr;
strcpy(ptr, "hello");
int i = 0;
while (*p) // note how I changed it to a while loop, C strings are NULL terminated, so this will break once we get to the end of the string. What we gain is that this will work for ANY string size.
{
printf("ptr[%d] = %c\n", i++, *p); // here i dereference the pointer, accessing its individual char
p++;
}
free(ptr);
return 0;
}
関連
-
[解決済み] Connect: ソケット以外でのソケット操作
-
[解決済み】デバッガgdbの使用時に不明な終了シグナルが発生する。
-
[解決済み】cudamalloc()の使用。) なぜダブルポインタなのか?
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】C言語でint64_t型を表示する方法
-
[解決済み】malloc():メモリ破壊
-
[解決済み】Makefile:1: ***セパレータがありません。停止します。
-
[解決済み】警告:式の結果が未使用の場合
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] java.lang.OutOfMemoryError "に対処する。PermGen space "エラーに対処する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Cコンパイルエラーです。Idは1終了ステータスを返した
-
[解決済み】ISO C90では、C言語での宣言とコードの混在が禁止されています。
-
[解決済み】初期化がキャストなしで整数からポインタを作成 - C言語
-
[解決済み] [Solved] なぜこのようなエラーが発生するのでしょうか。「データ定義に型またはストレージクラスがない」?
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】警告:引数「互換性のないポインタ型から」を渡す[デフォルトで有効]。
-
[解決済み】0LLや0x0ULの意味は何ですか?
-
[解決済み】Linuxソケットのwrite()でBad File Descriptorが発生するC
-
[解決済み】Errno: 11, Resource Temporarily Unavailable(リソースが一時的に利用できない
-
[解決済み] mallocの結果はキャストするのですか?