掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.30205

シグウィンで実行できないことに関して
投稿者---森の水だより(2007/05/27 12:17:49)


cygwinを使ってコンパイルをしています。

しかしコンパイルは出来るのですが、実行が出来ません。

2 [main] report3-1 3428_cygtls::handle_execeptions:Error while dumping state (probably corrupted atack) Segmentation fault (core dumped)

というプログラムが出てきてしまいます。なぜなのでしょうか?

以下のプログラムで、BCCでは正常に実行までされます。

#include <stdlib.h>
#include <stdio.h>
typedef int Item;
typedef struct node *link;
struct node { Item item; link next; };
int main(void)
{
link head, a, b, c, d,x,p,k;
a = malloc(sizeof(*a)); b = malloc(sizeof(*b));
c = malloc(sizeof(*c)); d = malloc(sizeof(*d));

a->item = 10; b->item = 20; c->item = 30;d->item = 40;
a->next = b; b->next = c; c->next = d; d->next = NULL;
head = a; a = b = c = d = NULL;

p=head;
while (p!= NULL) {
printf("%d\n", p->item);
p = p->next;
}

printf("\n追加後\n");

x= malloc(sizeof(*x));
x->item=25;

k=head->next;
x->next = k->next;
k->next = x;

p=head;
while (p!= NULL) {
printf("%d\n", p->item);
p = p->next;
}

printf("\n削除後\n");

k=head->next;
head->next =k->next;

p=head;
while (p != NULL) {
printf("%d\n", p->item);
p = p->next;
}

return 0;
}






この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:シグウィンで実行できないことに関して 30207 Hermit 2007/05/27 14:09:09
<子記事> Re:シグウィンで実行できないことに関して 30208 bugs 2007/05/27 14:30:18
<子記事> Re:シグウィンで実行できないことに関して 30210 たかぎ 2007/05/27 15:27:04
<子記事> Re:シグウィンで実行できないことに関して 30214 acid 2007/05/28 09:47:32


No.30207

Re:シグウィンで実行できないことに関して
投稿者---Hermit(2007/05/27 14:09:09)


ソースの添付は「HTML変換ツール」で字下げしましょう。

他の簡単なプログラムは、gcc でコンパイルして実行できますか?
どのあたりまで実行できているか、デバッガを使ってみましょう。
gcc -g foo.c などとして、
gdb a.exe
で、ソースコードデバッガが使えるはずです。

または、printf() をたくさん入れてトレースしてみましょう。




この投稿にコメントする

削除パスワード

No.30208

Re:シグウィンで実行できないことに関して
投稿者---bugs(2007/05/27 14:30:18)


コードをざっと見たところ、

>	head = a; a = b = c = d = NULL;

この行が何やら怪しげです。
なぜ、a〜dにNULLを入れているのでしょうか?
BCCでは「たまたま」正しい結果を得ているだけのような気がします。




この投稿にコメントする

削除パスワード

No.30209

Re:シグウィンで実行できないことに関して
投稿者---Hermit(2007/05/27 14:53:52)


>なぜ、a〜dにNULLを入れているのでしょうか?
意味は不明ですが、特に問題はないと思います。


この投稿にコメントする

削除パスワード

No.30210

Re:シグウィンで実行できないことに関して
投稿者---たかぎ(2007/05/27 15:27:04)
http://takagi.in/


>cygwinを使ってコンパイルをしています。
>
>しかしコンパイルは出来るのですが、実行が出来ません。

何をもって正常とするかは知りませんが、Cygwinでもコアを吐くことなく実行できましたよ。
Cygwinは、そのバージョンによって、ときどき変な動作をすることがあります(早い話がCygwinのバグです)。最新バージョンに更新して試してみてはいかがでしょうか?




この投稿にコメントする

削除パスワード

No.30214

Re:シグウィンで実行できないことに関して
投稿者---acid(2007/05/28 09:47:32)


なんとなくだけど、
>a = b = c = d = NULL;
ここでcygwinは、abcdがフリーされたと思って、参照できない領域としてコアダンプしてるんじゃないだろうか。
cygwinのことは良く分からないけど。
ちなみにborlandでも警告は出ましたが、実行はできました。

ところで、動的に増やして無いのにmallocしてるのは、多分練習だから?
どっちにしろ、ちゃんと最後にfreeしたほうが良いですよ。


この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧