C中的分段故障返回

时间:2016-04-14 02:43:22

标签: 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, 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;
}

3 个答案:

答案 0 :(得分:3)

您的数组只包含20个条目,但您尝试访问索引为20到99的无效条目。

答案 1 :(得分:1)

您正在尝试访问越界元素。这是一个快速解决方法:

#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;     
    }
}

答案 2 :(得分:1)

您正在尝试访问越界元素。这是正确的方法。 虽然您将数组的大小作为另一个参数传递,而不是使用它,但您使用的是更大的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;
}