質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

6370閲覧

Abort trap について

SatoshiKomatsu

総合スコア14

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2017/07/13 09:57

###前提・実現したいこと
とあるファイルから線形リストを作成したいです。
プログラム自体は間違ってはいないと思うのですが、Windows上では動き、MacではAbort trapが発生しました
なぜ、どこが違うのか
そもそもAbort trapとは何なのか教えて欲しいです!

###発生している問題・エラーメッセージ
コンパイルは正常に行われ、実行するとabort trapが出てきました

Abort trap 6

###該当のソースコード

#include <stdio.h> #include <string.h> #include <stdlib.h> struct member { int num; char name[13]; char profile[45]; struct member *next; }; typedef struct member list_mbr; list_mbr *list(FILE *); void print_list(list_mbr *p); //int get_data(void); int main(int argc,char *argv[]) { /* ファイルポインタと構造体へのポインタの定義 */ struct member *listptr; FILE *fp; /* ファイルのオープン */ if ((fp=fopen(argv[1],"r"))==NULL) { fprintf(stderr,"%s がオープンできません\n",argv[1]); exit(1); } /* リストの作成 */ listptr = list(fp); /* ファイルのクローズ */ fclose(fp); /* リストの表示 */ print_list(listptr); return (0); } /* 以降 各関数の内容を記述すること */ void print_list( list_mbr *p){ while(p != NULL){ printf("%d %s %s\n", p->num, p->name, p->profile); p = p->next; } // printf("\n"); } list_mbr *list(FILE *fp){ struct member *p,*newp, a; p = NULL; while(fscanf( fp,"%d %s %s", &a.num, &a.name, &a.profile) != EOF){ newp = (struct member *)malloc(sizeof(struct member)); newp->num = a.num; strcpy(newp->name, a.name); strcpy(newp->profile, a.profile); newp->next = p; p = newp; } return p; }

###試したこと
windows上では成功したのですが...

###補足情報(言語/FW/ツール等のバージョンなど)
読み込むファイルの内容に問題はなかったです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2017/07/14 04:09

WindowsとMacでは同じファイルを使っているのですか?それともMacで作ったものでしょうか?
ttyp03

2017/07/14 04:12

また読み込んだファイルの中身を提示していただけると、解決の糸口になります。特に文字数が気になります。
SatoshiKomatsu

2017/07/19 14:47

遅くなり、すいません。WIndowsで作ったものです
SatoshiKomatsu

2017/07/19 14:47

10 香川真司 FW_1989/03/17_172cm_63kg_マンチェスターU 17 長谷部誠 MF_1984/01/18_180cm_72kg_ニュルンベルク 5 長友佑都 DF_1986/09/12_170cm_68kg_インテル 13 大久保嘉人 FW_1982/06/09_170cm_73kg_川崎F 7 遠藤保仁 MF_1980/01/28_178cm_75kg_ガンバ大阪 9 岡崎慎司 FW_1986/04/16_174cm_76kg_マインツ 1 川島永嗣 GK_1983/03/20_185cm_82kg_スタンダール 4 本田圭佑 MF_1986/06/13_182cm_74kg_ACミラン 2 内田篤人 DF_1988/03/27_176cm_67kg_シャルケ 15 今野泰幸 DF_1983/01/25_178cm_73kg_ガンバ大阪 22 吉田麻也 DF_1988/08/24_189cm_81kg_サウサンプトン
ttyp03

2017/07/19 23:40

字数的には問題なさそうですね。文字コードは何ですか?
guest

回答1

0

ベストアンサー

質問の回答をいただいていませんが、予想で回答しておきます。

おそらくWindowsとMacでそれぞれファイルを作って、それを読み込ませているものと思われます。
そしてそのファイルの中身は、nameは全角で6文字、もしくはprofileが全角で22文字のデータが存在しているのではないでしょうか。
そしておそらくWindowsで作ったファイルの文字コードはSJISで、MacのはUNICODE(種類は不明)なのではないでしょうか。
SJISは全角2バイトなので提示のコードにある領域で足りるのですが、UNICODEの場合、全角は2バイトとは限らず3バイトや4バイトなどが存在します。
つまり読み込むための領域が足りず、バッファオーバーランをした結果、アボートしているのではないかと推測しました。
解決するには、単純に十分な領域を確保するようにしてください。

そもそもAbort trapとは何なのか教えて欲しいです!

ちょうど過去の質問に回答されている方がいたので引用しておきます。
https://teratail.com/questions/46570

| たとえば「バッファ・オーバーラン」のようなプログラムの不正動作からシステムを保護するために、
| システムがそのプログラムを強制終了させた結果、発生しているエラーです。

投稿2017/07/14 04:36

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問