2016-03-07 91 views
-2

它運行良好,但是當我輸入./a.out時,它一直說分段錯誤並結束程序。我相當新,並希望得到一些幫助。我想保留這兩個進程有自己的功能,我只是失去了什麼即時通訊做錯...程序有分段錯誤

即時通訊假設從0 - 101填充隨機數列表和打印列表使用指針

#include<stdio.h> 
#define SIZE 20 
void FillArray (int * , int); 
void PrintArray (int * , int); 


int main(void) 
{ 
int *NumList[SIZE]; 

FillArray (*NumList, SIZE); 
PrintArray (*NumList, SIZE); 

return 0; 
} 

void FillArray (int *array, int size) 
{ 
int a; 
for(a=0;a<size;a++) 
    { 
    array[a] = (rand() % 101); 
    } 

} 

void PrintArray (int *array, int size) 
{ 
int a; 
for(a=0;a<size;a++) 
    { 
    printf("%d ", array[a]); 
    } 
} 
+0

一個int和一個指向int的指針是兩個不同的東西。 – stark

+0

你在什麼環境下運行你的代碼?您是否嘗試過使用gdb等工具來調查您的代碼中的哪個特定錯誤? – ilim

+0

是的,但c會識別,並嘗試使用錯誤時給我一個錯誤 –

回答

2

試着改變你的代碼有點

int NumList[SIZE]; 
FillArray (NumList, SIZE); 
PrintArray (NumList, SIZE); 

通過寫int *NumList[SIZE]你居然宣佈的int*陣列 - 指針int。不是你想要的,對吧?然後你寫FillArray (*NumList, SIZE);。它取消引用你的數組,結果是它的第一個元素是int*,這個元素是你傳遞的函數。並且您嘗試爲其元素分配一個值。因此賽格故障。

+0

非常感謝你!它現在完美了!你是一個救生員 –

+0

@F:如果這回答了你的問題,那麼考慮[接受它](http://stackoverflow.com/help/someone-answers)。爲你的問題想一個更好的標題。 – usr2564301