[解決済み] なぜこのコードは64ビットアーキテクチャでセグメンテーションされ、32ビットでは正常に動作するのですか?
2022-09-07 08:01:13
質問
次のようなC言語のパズルを見つけました。
Q: 次のプログラムは IA-64 ではセグメンテーション違反になりますが、IA-32 では正常に動作するのはなぜですか?
int main()
{
int* p;
p = (int*)malloc(sizeof(int));
*p = 10;
return 0;
}
のサイズが小さいことは知っています。
int
のサイズはポインタのサイズと同じとは限りません。
int
は32ビット、ポインタは64ビットとなる可能性があります)。しかし、これが上記のプログラムにどう関係するのかがよくわかりません。
何かアイデアはありますか?
どのように解決するのですか?
キャストから
int*
へのキャストは、適切な
#include
の戻り値の型は
malloc
が想定されています。
int
. IA-64 はたまたま
sizeof(int) < sizeof(int*)
があり、この問題を明白にしています。
(また、未定義の動作のため、プラットフォーム上であっても
sizeof(int)==sizeof(int*)
が真であるプラットフォームでも失敗する可能性があることに注意してください。)
は
comp.lang.c FAQ
を説明するエントリがあります。
からの戻り値をキャストする理由
malloc
は決して必要ではなく、潜在的に悪い
.
関連
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
[C] レポートエラー 代入の左オペランドとしてlvalueが必要
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
[解決済み] int32、int、int32_t、int8、int8_tの違いについて
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?
最新
-
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 実装 サイバーパンク風ボタン