- C言語なら俺に聞け 137 [無断転載禁止]©2ch.net
56 :デフォルトの名無しさん (ワッチョイ 2187-TInN)[]:2016/10/12(水) 18:53:55.97 ID:Ecy043Us0 - 環境はWindows10 64bit、Cygwin、gccです
ttp://www.geocities.jp/m_Hiroi/linux/clang12.html 上記サイトの最後の「プログラムリスト1」の連結リストのプログラムで、 List *ls = malloc(sizeof(List)); と書かれた部分は List l; List *ls = &l; と書いてもよいのではないか、と思って書き換えたら実行時にSegmentation fault(コアダンプ)が起きました ls.topをprintfで調べた所、どうやら関数に渡される事でls.topの値(つまり指すポインタ)が書き換わっているようです (ポインタに関する知識レベルはC言語ポインタ完全制覇を途中で挫折したレベルで、更にそれから数ヶ月空いてるので忘れてる部分もあるかもしれません) 何故こういう事が起こるのか、解説お願いします
|
- C言語なら俺に聞け 137 [無断転載禁止]©2ch.net
57 :デフォルトの名無しさん (ワッチョイ 2187-TInN)[]:2016/10/12(水) 18:59:27.30 ID:Ecy043Us0 - あと、具体的にどこでSegmentation faultが起きるのかも調べましたが、
insert_nth関数の cp->next = make_cell(x, cp->next); で起きるようです
|
- C言語なら俺に聞け 137 [無断転載禁止]©2ch.net
59 :デフォルトの名無しさん (ワッチョイ 2187-TInN)[sage]:2016/10/12(水) 19:21:54.37 ID:Ecy043Us0 - >>58
レスありがとうございます! その場合関数を飛び越えても構造体が破壊されない領域にポインタが指す構造体が記憶されるっていうことでしょうか。 もしそうならその場所はヒープ領域で合ってますか?
|
- C言語なら俺に聞け 137 [無断転載禁止]©2ch.net
60 :デフォルトの名無しさん (ワッチョイ 2187-TInN)[sage]:2016/10/12(水) 19:22:26.45 ID:Ecy043Us0 - その場合=malloc使った場合、でした
|
- C言語なら俺に聞け 137 [無断転載禁止]©2ch.net
61 :デフォルトの名無しさん (ワッチョイ 2187-TInN)[sage]:2016/10/12(水) 19:35:00.26 ID:Ecy043Us0 - 多分>>59-60は自己解決しました。mallocが何やってるかが抜けてたようです。
ただローカル変数が生き残らないというのは自分じゃ解決できなかったと思います。ありがとうございました。
|