• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c++でセグメンテーション違反)

c++でセグメンテーション違反

このQ&Aのポイント
  • c++で配列を関数の引数として扱うプログラムを作ろうとした際に、「セグメンテーション違反です」と表示され異常終了してしまいます。
  • 原因がわかりません。
  • OSはLinux(RED HAT ENTERPRISE LINUX 5)、コンパイラはg++(バージョン 4.1.2)を使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.4

よく「コンパイルが通ったのに実行時エラーが出る」という質問を見かけますが、 「コンパイルが通った」は「文法的に間違ってない」ことを保障するだけです。 プログラムそのものの誤りがないことを保障する訳ではありません。 memsetの第一引数の型void *はポインタ型ならなんでも受け入れるので、 プログラムの意図ではchar *を渡すところでchar **を渡してしまっても コンパイルはできてしまう、ということです。

mimimirror
質問者

お礼

回答ありがとうございました。

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

> void test(char buf[]) と宣言した buf で > memset(&buf, 0, BUFSIZE); としたときの &buf の型は何になると思いますか?

mimimirror
質問者

お礼

回答ありがとうございました。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

main関数で、 char と buf がくっついているため、セグメンテーション違反の前に コンパイルができません。 お手元にあるソースコードを「正確に」教えてください。

mimimirror
質問者

お礼

回答ありがとうございました。

noname#29459
noname#29459
回答No.1

基本的に、”セグメンテーション・フォールト”が起きたときの、対処方法が、間違ってる。  Linuxでは、セグメンテーションフォールトは、普通、core dumpを引き起こす。core dumpという用語もしらないと思うから、googleしなさい。  Coreファイルができないなら、そのgcc/Linuxのオンラインマニュアルを読んで、環境設定する。  それで、デバッグシンボル付きのelfファイルが出きるようにして、コンパイル&リンクして、core dumpさせる。  それで、デバッガーを使って、スタックトレースすれば、なにが、間違っとるかは、あなたが、C言語の初歩の初歩さえ、わかっていれば、わかるはず。

mimimirror
質問者

お礼

回答ありがとうございました。

関連するQ&A