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

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

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

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

受付中

【c】segmetationfault のエラーで困ってます.

studyprg
studyprg

総合スコア51

C

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

4回答

0リアクション

1クリップ

516閲覧

投稿2022/09/04 06:23

編集2022/09/04 08:44

やりたいこと

自然言語処理について勉強しています。
Wikipediaのdumpデータから本文を抜き出して処理をしようと思ってます。
segmentation faultがすぐに起きて困ってます.
やりたいこととしては以下です.

・list_history0.txt の各行が欲しい記事の "タイトル" を示している。
・get_X1.txt の各行が (xml ファイル内の記事の ) "タイトル", "id", "開始バイトオフセット", "バイトサイズ" を示している。
・list_history0.txt から一行ずつ読み込み、 get_X1.txt からタイトルが一致する行を探して"開始バイトオフセット", "バイトサイズ"を利用して xml ファイルからその記事を取り出し、「タイトル(タブ)id(改行)記事」を history_0text.txt に書き出す

プログラミングはあまり得意ではないです。

ソースコードとファイル構成

list_history0.txt(get_X1.txtの一部)

日本ゴルフツアー機構 ファイル:十弗駅看板.jpg 桂米朝 国道101号 笑福亭松鶴 リサジュー図形 ムラカ 日淳 井原裕士

次にget_X1.txt

遠山景晋 493646 2948 0 双子 (映画) 1011517 13316 12558 ユダヤ史関連人物の一覧 1855796 18478 68347 Trip trip 56477 87361 0 新銀行東京 615917 91374 90824 東京都道444号下石神井大泉線 61977 144134 143579 野川さくら 1485326 147328 146788 リメンバー・ミー 1740912 231113 230616 ダヒル・リヤレ・カヒン 787401 233208 232520 ソマリランドの大統領一覧 1094317 237068 236399 バルティ 1094317 242216 3511 歌がチカラ 56477 246360 0 トーンチャン 994927 250016 1231 北海道道145号伊達インター線 1428473 251833 0 アクセス禁止 97976 255003 254438 蒲池城 928380 274271 1331 新潟地震 1583832 276296 0 長崎貿易 872478 310391 309847 春牟古丹島 730521 319037 318416 スター誕生! 1873614 325384 324878 サーキット 1037035 456227 455590 Wikipedia:今日は何の日 9月 597321 510011 44598 WP 1617964 555804 2507 栄町駅 (札幌市) 366911 558992 0 北海道中央バス 1599928 574344 573819 広島電鉄1300形電車 6896 668607 668053 柳川鍋 924713 669194 668686 京都市内の通り 191555 676990 37953 由布岳 918416 715450 0 HN 1486874 724007 723488 コンセルヴァトワール 910758 724984 724479 玉川砂記子 1094317 729024 728336 シラガゴケ類 397108 782982 782331 NC 059668 785975 5126 スギゴケ 1781685 791744 0 摂津源氏 990884 794923 794341 NE 262022 805690 805156 NG 1718990 808263 807633 源氏嫡流 279186 810908 810440 魔性の子 1680100 819840 819300 NI 474 844662 844142 NL 104512 846162 845675 翼細胞 208476 847883 847316 NO 230804 848873 848430 多田源氏 990884 850953 850420 NR 786173 863825 863328 フワランポーン駅 1356379 866728 866158 キングカメハメハ 1693773 886601 886041 OM 387704 978075 977510 苔 826261 980849 980395 徐世昌 16765 988907 988200 NY市警緊急出動部隊 トゥルー・ブルー 791294 997442 996895 PE 1627601 1006180 3452 セラミック噴射装置 3751 1010197 0 堀内賢雄 12357 1010829 1010266 筑後宇都宮氏 575671 1197925 1197423 リンカーン (競走馬) 194189 1202581 1201984 PK 703098 1223633 3515 真田町 1231761 1229043 6504 トンファー 503710 1236096 0 情報処理技術者試験 444436 1244748 1244203 キングマンボ 1728221 1308947 1308351 イースター (曖昧さ回避) 120987 1322716 1322186 田中新兵衛 760804 1324023 1323537 PR 703098 1331531 1331062 PT 665832 1336401 1335869 高橋俊昌 291984 1341864 1341250 PW 136753 1350315 1349839 坂城町 685790 1352052 1351543 セレン整流器 1094317 1362107 1361338 ポリアクリルアミドゲル電気泳動 520484 1365670 1365099 シェルピンスキー数 990884 1371139 1370494 はだしのゲン 1126159 1379494 1378926 伊王島町 1338147 1525866 1525301 ノイローゼ 371027 1539066 1538569 原子力発電所 1084393 1540501 1539942 宮崎県総合運動公園第二硬式野球場 320096 1569579 7259 藤田瞳子 1094317 1578500 6210 赤外分光法 1768613 1585235 0 宇都宮清原工業団地 850234 1599642 1599097 樊噲 262022 1603667 1603179 国道385号線 7146 1611313 1610756 深川 1094317 1612117 1611379 碓氷第三橋梁 308365 1616321 5517         //読み込みたいところ 日本ゴルフツアー機構 870371 1623035 25562 ファイル:十弗駅看板.jpg 1780509 1649736 682 桂米朝 1589144 1652031 1217 国道101号 643806 1654059 0 笑福亭松鶴 1143138 1672954 1672423 リサジュー図形 1037035 1682479 1681821 ムラカ 885381 1691394 14441 日淳 1037035 1706472 0 井原裕士 308365 1710132 1709601         //読み込みたいところここまで ソマリア内戦 1037035 1714267 36576 深川 (江東区) 020100 1751367 0 日昇 833366 1764959 1764447 以下略

次にソースコードです.//追記に現在のソースを追加してます.

c

#include <stdio.h> #include <stdlib.h> #include <string.h> #define SIZE (256 * 1024 * 1024) #define MAX_REC (300000) typedef struct { char title[256]; char id[128]; int pb1; int pb2; } X1_INFO; int main() { int ll; int i; int x1_ctr = 0; char *p; X1_INFO *wx1; char pb1[16]; char pb2[16]; char *line = malloc(SIZE); char *title = malloc(SIZE); char *id = malloc(SIZE); char *text = malloc(SIZE); char *stitle = malloc(SIZE); X1_INFO *x1ptr = malloc(sizeof(X1_INFO) * MAX_REC); if (x1ptr == NULL) { printf("X1_INFO allocate error\n"); return 10; } FILE *fp = NULL; FILE *fr = NULL; FILE *fr2 = NULL; FILE *gt = NULL; fp = fopen("jawiki-20211220-pages-articles-multistream2.xml", "rb"); //大元.wiki記事 fr = fopen("list_history0.txt", "r"); //読み込むファイル検索文字列 fr2 = fopen("get_X1.txt", "r"); //読み込むファイル2タイトルとidが記入 gt = fopen("history_0text.txt", "w"); //書き込むファイル // get_X1を全て読み込む while (fgets(line, SIZE, fr2) != NULL) { if (x1_ctr >= MAX_REC) { printf("Max Record Count Over:%d\n", MAX_REC); return 10; } ll = strlen(line); p = strtok(line, "\t\n"); strcpy(title, p); p = strtok(NULL, "\t\n"); strcpy(id, p); //デバッガによるとここでEXC_BAD_ACCESS (code=1, address=0x0) が発生 p = strtok(NULL, "\t\n"); strcpy(pb1, p); p = strtok(NULL, "\t\n"); strcpy(pb2, p); wx1 = x1ptr + x1_ctr; strcpy(wx1->title, title); strcpy(wx1->id, id); wx1->pb1 = atoi(pb1); wx1->pb2 = atoi(pb2); x1_ctr++; } while (fgets(line, SIZE, fr) != NULL) { ll = strlen(line); if (line[ll - 1] == '\n' && ll > 0) line[ll - 1] = '\0'; //改行削除 strcpy(stitle, line); printf("Stitle(検索対象)is %s.\n", stitle); for (i = 0; i < x1_ctr; i++) { wx1 = x1ptr + i; if (strcmp(wx1->title, stitle) == 0) { printf("%s is found! title:%s\n", stitle, wx1->title); fseek(fp, wx1->pb1, SEEK_SET); memset(text, 0x00, SIZE); if (wx1->pb2 > 0) { fread(text, 1, wx1->pb2, fp); } printf("%s\t%s\n%s\n\n\n", wx1->title, wx1->id, text);//記事の間を3行開けたい. break; } } if (i == x1_ctr) { printf("%s is not found!\n", stitle); } } printf("\n\n\nprocess ok!\n\n\n"); fclose(fp); fclose(fr); fclose(fr2); fclose(gt); }

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

studyprg

2022/09/04 08:44

タグ修正しました。 もしよろしければ解決のお力添えよろしくお願いします
kazto

2022/09/04 09:07

単純に考えて、strtokがトークンを見つけられずにNULLが返却されているのではないでしょうか。 デバッグはしてみましたか?
studyprg

2022/09/04 09:54

デバッグの結果で判明したセグメンテーションが起きた場所はstrcpy (id,p)と記載してますがここがカズトサンが言っていらした場所なんですかね?
ALOHAMS

2022/09/04 23:44

やりたいことは下URLの質問と同じだと思うのですが、解決済みになっています。 https://teratail.com/questions/4fxvbmqpeskxm7 前回と今で変わったところはどこでしょう? そこに原因があると思われます。
studyprg

2022/09/04 23:51

自分としては変えたつもりはないのですが,生成先のファイルの中身が変わっているので生成し直しますね.
studyprg

2022/09/05 10:33

おそらくget_x1.txtが手違いで消えたみたいですね。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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