質問
下記のプログラムで静的変数である、main関数内のlistを自動変数として宣言すると最初のscanf文を読み込む前に実行中断してしまいます。自分ではこのプログラムだとlistが自動変数でも静的変数でも結果変わらないと思っていたのですが、なぜ実行中断してしまうのか解説していただけると有り難いです。
該当のソースコード
c
1#include <stdio.h> 2#include <string.h> 3#include <ctype.h> 4#include <stdlib.h> 5 6typedef struct List{ 7 int size; 8 int *number[1024]; 9}List; 10 11void initList(List *List){ 12 int i; 13 List->size=0; 14 for(i=0;i<1024;i++){ 15 List->number[i]=NULL; 16 } 17} 18 19void Listadd(List *List,int x){ 20 if(List->number[List->size/1024]==NULL){ 21 List->number[List->size/1024]=malloc(sizeof(int)*1024); 22 } 23 List->number[List->size/1024][List->size%1024]=x; 24 List->size++; 25} 26 27void ListPrint(List *List){ 28 int i; 29 for(i=0;i<List->size;i++){ 30 printf("%d ",List->number[i/1024][i%1024]); 31 } 32 printf("\n"); 33} 34 35void ListDelete(List *List){ 36 int i; 37 List->size=0; 38 for(i=0;i<1024;i++){ 39 free(List->number[i]); 40 List->number[i]=NULL; 41 } 42} 43 44 45int main(void){ 46 static List list[1024]; 47 int n,q,t,a,x; 48 int i; 49 scanf("%d%d",&n,&q); 50 for(i=0;i<n;i++){ 51 initList(&list[i]); 52 } 53 while(q--){ 54 scanf("%d%d",&a,&t); 55 if(a==0){ 56 scanf("%d",&x); 57 Listadd(&list[t],x); 58 }else if(a==1){ 59 ListPrint(&list[t]); 60 }else if(a==2){ 61 ListDelete(&list[t]); 62 } 63 } 64 return 0; 65}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。