使用uint64_t进行分段错误(核心转储)

时间:2014-08-01 11:39:49

标签: c segmentation-fault

我使用以下代码获取分段错误。这是我没有分割错误SIZE = 1000000的最大尺寸,如果我再增加零,我得到分割错误。

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

uint64_t SIZE = 10000000;

uint64_t getsum(int data[], uint64_t size)
{
    uint64_t sum = 0;
    uint64_t i = 0;

    for ( i; i < size; ++i)
        sum += data[i];

    return sum;
}

int main(void)
{
    srand((unsigned int)time(NULL));
    int data[SIZE];
    uint64_t i = 0;

    for ( i; i < SIZE; ++i)
        data[i] = rand() % 100 + 1;

    printf("sum: %"PRIu64" \n", getsum(data, SIZE));

    return 0;
}

1 个答案:

答案 0 :(得分:4)

您超出了可用的堆栈空间,因此导致了段错误。如果data数组太大,则不应该使用自动存储。

您应该全局定义它static,或者在堆上分配它。