- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:c++でセグメンテーション違反)
c++でセグメンテーション違反
このQ&Aのポイント
- c++で配列を関数の引数として扱うプログラムを作ろうとした際に、「セグメンテーション違反です」と表示され異常終了してしまいます。
- 原因がわかりません。
- OSはLinux(RED HAT ENTERPRISE LINUX 5)、コンパイラはg++(バージョン 4.1.2)を使用しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
よく「コンパイルが通ったのに実行時エラーが出る」という質問を見かけますが、 「コンパイルが通った」は「文法的に間違ってない」ことを保障するだけです。 プログラムそのものの誤りがないことを保障する訳ではありません。 memsetの第一引数の型void *はポインタ型ならなんでも受け入れるので、 プログラムの意図ではchar *を渡すところでchar **を渡してしまっても コンパイルはできてしまう、ということです。
その他の回答 (3)
- kmee
- ベストアンサー率55% (1857/3366)
回答No.3
> void test(char buf[]) と宣言した buf で > memset(&buf, 0, BUFSIZE); としたときの &buf の型は何になると思いますか?
質問者
お礼
回答ありがとうございました。
- asuncion
- ベストアンサー率33% (2127/6290)
回答No.2
main関数で、 char と buf がくっついているため、セグメンテーション違反の前に コンパイルができません。 お手元にあるソースコードを「正確に」教えてください。
質問者
お礼
回答ありがとうございました。
noname#29459
回答No.1
基本的に、”セグメンテーション・フォールト”が起きたときの、対処方法が、間違ってる。 Linuxでは、セグメンテーションフォールトは、普通、core dumpを引き起こす。core dumpという用語もしらないと思うから、googleしなさい。 Coreファイルができないなら、そのgcc/Linuxのオンラインマニュアルを読んで、環境設定する。 それで、デバッグシンボル付きのelfファイルが出きるようにして、コンパイル&リンクして、core dumpさせる。 それで、デバッガーを使って、スタックトレースすれば、なにが、間違っとるかは、あなたが、C言語の初歩の初歩さえ、わかっていれば、わかるはず。
質問者
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。