2016-03-07 70 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