トップページ > プログラム > 2016年10月12日 > Ecy043Us0

書き込み順位&時間帯一覧

8 位/239 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000002300005



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん (ワッチョイ 2187-TInN)
C言語なら俺に聞け 137 [無断転載禁止]©2ch.net

書き込みレス一覧

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が何やってるかが抜けてたようです。
ただローカル変数が生き残らないというのは自分じゃ解決できなかったと思います。ありがとうございました。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。