C语言中的分段错误返回

C语言中的分段错误返回,c,segmentation-fault,C,Segmentation Fault,程序编译良好,但运行时返回“分段错误”。请帮忙。谢谢忽略其他三个函数。程序应该使用指针和指针算法填充数组并打印数组中的值 #include <stdio.h> void FillArray ( int *array, int size ); void PrintArray ( int *array, int size ); //void BubbleSort ( int *array, int size ); //void SelectionSort ( int *array,

程序编译良好,但运行时返回“分段错误”。请帮忙。谢谢忽略其他三个函数。程序应该使用指针和指针算法填充数组并打印数组中的值

 #include <stdio.h>

void FillArray ( int *array, int size );
void PrintArray ( int *array, int size );
//void BubbleSort ( int *array, int size );
//void SelectionSort ( int *array, int size );
//void Swap ( int *x, int *y );

#define SIZE 20

int main (void)
{
    int NumList [SIZE];
    FillArray(NumList, SIZE);
    PrintArray (NumList, SIZE);

}

void PrintArray (int *array, int size)
{
    int i;
    for (i=0; i<100; i++)
    {
        printf("%d \t", *(array+i));
    }
}

void FillArray(int *array, int size)
{
    int i;
    srand(time(NULL));

    for (i=0; i<100; i++)
    {
        *(array+i)= rand()%101;     
    }

    return;
}
#包括
void FillArray(int*array,int size);
void printary(int*array,int size);
//void BubbleSort(int*数组,int大小);
//void SelectionSort(int*数组,int大小);
//无效交换(int*x,int*y);
#定义尺寸20
内部主(空)
{
int NumList[大小];
FillArray(NumList,SIZE);
打印阵列(NumList,SIZE);
}
无效打印数组(整数*数组,整数大小)
{
int i;

对于(i=0;i您的数组仅包含20个条目,但您试图访问索引为20到99的无效条目。

您正在尝试访问绑定外的元素。下面是一个快速修复方法:

#include <stdio.h>
#include <stdlib.h>

#define SIZE 100

void FillArray ( int *array, int size );
void PrintArray ( int *array, int size );

int main (void)
{
    int NumList [SIZE];
    FillArray(NumList, SIZE);
    PrintArray (NumList, SIZE);
}

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

void FillArray(int *array, int size)
{
    int i;
    srand(time(NULL));

    for (i=0; i<100; i++)
    {
        array[i] = rand() % 101;     
    }
}
#包括
#包括
#定义大小100
void FillArray(int*array,int size);
void printary(int*array,int size);
内部主(空)
{
int NumList[大小];
FillArray(NumList,SIZE);
打印阵列(NumList,SIZE);
}
无效打印数组(整数*数组,整数大小)
{
int i;

对于(i=0;i您正在尝试访问绑定外的元素。下面是正确的方法。 虽然您将数组的大小作为另一个参数传递,但并没有使用它,而是使用了一个更大的100,它是硬编码的

#include <stdio.h>
void FillArray ( int *array, int size );
void PrintArray ( int *array, int size );

#define SIZE 20

int main (void)
{
    int NumList [SIZE];
    FillArray(NumList, SIZE);
    PrintArray (NumList, SIZE);

}

void PrintArray (int *array, int size)
{
    int i;
    for (i=0; i < size; i++)
    {
        printf("%d \t", *(array+i));
    }
}

void FillArray(int *array, int size)
{
    int i;
    srand(time(NULL));

    for (i=0; i < size; i++)
    {
        *(array+i)= rand()%101;     
    }

    return;
}
#包括
void FillArray(int*array,int size);
void printary(int*array,int size);
#定义尺寸20
内部主(空)
{
int NumList[大小];
FillArray(NumList,SIZE);
打印阵列(NumList,SIZE);
}
无效打印数组(整数*数组,整数大小)
{
int i;
对于(i=0;i
你做过任何调试吗?这很简单。你应该使用valgrind之类的工具来检测内存泄漏。“忽略其他三个功能。”你应该在发布之前删除无关内容,而不是告诉我们忽略它,这只是懒惰。为什么说21到99?为什么不说0到99(所有访问的索引)或20到99(是否访问了所有无效的)?