c言語でプログラムを作っているのですが、構造体の中のポインタを参照するとセグメンテーション違反と出ました。
調べてみたらこんな記事があって解決方法も載ってました。
http://oshiete.goo.ne.jp/qa/3144134.html
この中の4の回答者様と同じようにたぶん実態がないんだと思います。
そこでいろいろ試してみてこういうものを作ったのですが、こうするとprintfで変な値を指しています。たぶん環境によって変わると思いますが、自分の場合は./a.outを指していました。
この挙動はなぜ起こるのですか?また、このように別の関数で構造体を宣言して、その後、別の関数からポインタで参照する方法を教えてください。
お願いします。
c
1#define DEBUG 2 3 #include<stdio.h> 4 5 #include<stdlib.h> 6 7 8 9struct Sort{ 10 11 int no; 12 13 char *name; 14 15 16 17 char *avg; 18 19 //char *maximax; 20 21 char *saiaku_saidai; 22 23 24 25 char *alias; 26 27}; 28void sortinit(struct Sort *); 29 30int main(void){ 31struct Sort *arr; 32void *fes; 33 34sortinit(arr); 35//struct Sort *aa=(struct Sort *)fes; 36 37 printf("%s",arr->name); 38 39 return 0; 40 41} 42 43 void sortinit(struct Sort *in){ 44 struct Sort sortArr[]={ 45 46 { 47 48 1,"バブルソート","nasi","n^2","基本交換法" 49 50 },{ 51 52 2,"選択ソート","n^2","n^2","基本三法" 53 54 },{ 55 56 3,"挿入ソート","n+d","n^2","基本三法" 57 58 },{ 59 60 4,"シェルソート","nasi","nlog^2n","" 61 62 },{ 63 64 5,"マージソート","nlogn","nlogn","" 65 66 },{ 67 68 6,"ヒープソート","nlogn","nlogn","" 69 70 },{ 71 72 7,"クイックソート","nlogn","n^2","" 73 74 },{ 75 76 8,"ただの(偏った)二分木","n+1/2","n","線形探索法" 77 78 },{ 79 80 9,"完全二分木","","","" 81 82 },{ 83 84 10,"2分探索法","","","" 85 86 } 87 88 }; 89in=sortArr; 90//struct Sort *in2=(struct Sort *)in; 91 92}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/06/01 08:20 編集
退会済みユーザー
2016/06/01 08:31 編集
2016/06/01 08:34
退会済みユーザー
2016/06/01 09:30