我使用以下代码获取分段错误。这是我没有分割错误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;
}
答案 0 :(得分:4)
您超出了可用的堆栈空间,因此导致了段错误。如果data
数组太大,则不应该使用自动存储。
您应该全局定义它static
,或者在堆上分配它。