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

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

新規登録して質問してみよう
ただいま回答率
85.35%
連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

Q&A

1回答

1625閲覧

連結リストへの挿入関数でThread 1: EXC_BAD_ACCESS (code=1, address=0x0)が出るのを解決したい。

VanS

総合スコア7

連結リスト

連結リストとは、データ構造のひとつであるリストの中で、要素が前後の要素の情報を持つことで、要素が連結(リンク)しているリストの事を呼びます。

0グッド

0クリップ

投稿2020/06/03 14:26

編集2020/06/04 01:16

前提・実現したいこと

C言語で連結リストへの挿入関数を作成したのですが、実行するとThread 1: EXC_BAD_ACCESS (code=1, address=0x0)のエラーが出で実行できません。
そもそもの挿入関数の作成が回りくどくわかりづらいものかと思いますが、何卒よろしくお願いします。

発生している問題・エラーメッセージ

エラーメッセージ Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)

該当のソースコード

C

1ソースコード #include <stdio.h> 2#include <stdlib.h> 3 4typedef struct list{ 5 struct list *next; 6 int value; 7}LIST; 8 9void insert(LIST header,int n,int data) /*header,何番目に何のデータを挿入するかを渡す*/ 10{ 11 LIST *p,*new; 12 int count=0; 13 14 p=header.next; 15 while (p!=NULL && count<n){ 16 p=p->next; 17 count++; 18 } 19 20 if ((new=malloc(sizeof(LIST)))==NULL){ 21 printf("メモリが足りません。"); 22 exit(1); 23 } 24 new=(LIST *)malloc(sizeof(LIST)); 25 new->next=p->next; /*ここにエラーが表示されます。*/ 26 p->next=new; 27 new->value=data; 28 29 for (int i=0;p->next==NULL;i++){ 30 printf("%d...%d/%p",i,p->value,p->next); 31 } 32 free(new); 33 34} 35 36int main(void) 37{ 38 int select,n,data; 39 40 LIST header; 41 header.next=NULL; 42 43 printf("いずれの関数を利用しますか?\n0..挿入/1..削除/2..分断/3..連結:"); 44 scanf("%d",&select); 45 46 switch(select){ 47 case 0: 48 printf("何番目に挿入しますか?:");scanf("%d",&n); 49 printf("挿入するデータを入力してください。:");scanf("%d",&data); 50 51 insert(header,n,data); 52 53 break; 54 55 56 case 1: 57 break; 58 59 case 2: 60 break; 61 62 63 case 3: 64 break; 65 } 66 return 0; 67 68} 69 70 71 72 73

試したこと

ソースコード内にあるようにmalloc()でメモリを確保してみましたが変化ありません。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.2 (11B52

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

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

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

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

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

guest

回答1

0

if ((new=malloc(sizeof(LIST)))==NULL){ printf("メモリが足りません。"); exit(1); } new=(LIST *)malloc(sizeof(LIST));

最初のmallocの結果が捨てられてますね

for (int i=0;p->next==NULL;i++){ printf("%d...%d/%p",i,p->value,p->next); }

p はこのループ中で変化しないけど、これでいいんでしょうか

free(new);

最初にmallocされた領域は開放されません

で、質問のエラーですが、原因は他の場所にあるため、コードの一部分だけ提示されても回答できません。

投稿2020/06/03 23:38

編集2020/06/03 23:45
y_waiwai

総合スコア88042

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

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

VanS

2020/06/04 01:18

pの変化がない→その通りですね。。うまく表現できません。main関数を追加して更新しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問