#include "stdio.h"
struct List {
int i;
};
int main() {
int c[5] = {3,1,2,5,4};
struct List **list;
printf("----%p\n",list);
struct List one = {0};
struct List two = {1};
list[0] = &one;
list[1] = &two;
printf("One: %p\n", list[0]);
printf("Two: %p\n", list[1]);
return 0;
}
結果印刷:Cコードでセグメンテーションフォルトが表示されるのはなぜですか?11ですか?
----0x0
Segmentation fault: 11
私はC言語を学びました。ここで何が問題なの?そして、 "int c [5] = {3,1,2,5,4}"の行を削除すると、コードは正常に動作します。それは印刷します。
----0x7fff5d9a99a0 (1
One: 0x7fff5d9a9978 (2
Two: 0x7fff5d9a9970 (3
そして、なぜ
「は、ポインタへのポインタは、」配列として扱うことができ、「2(」から「(1」異なるのアドレスである
'list'が初期化されていない: あなたは10 PTRSの配列のようなものに
list
PTを作ることができます。特に指定する場所ではないため、 'list [0]'に値を代入すると、コードは未定義の動作を呼び出します。 –必要なのは 'struct List * list [2]'です。 –