我有一个处理非常大的数组的程序,当我试图用随机值填充数组时,它总是在特定索引处进行段错误。在Mac OSX 10.10运行的XCode,它出现segfaults在指数1000448,和GCC针对LLVM版本6.1.0它在故障1001472.在特定索引处有非常大的数组的C段错误
这里是我的代码
#include <stdlib.h>
#include <stdio.h>
#define WIDTH 1000
#define HEIGHT 1000
/////////////////////////////////////////////////////////
// Program main
/////////////////////////////////////////////////////////
int main(int argc, char** argv) {
// set seed for rand()
srand(2006);
// 1. allocate host memory for matrices A and B
unsigned int length = WIDTH * HEIGHT;
unsigned int size = sizeof(int) * length;
printf("%i", size);
int* matrixA = (int*) malloc(size);
for(int i = 0; i < size; i++) {
printf("%i\n", i);
matrixA[i] = rand() % 10;
}
free(matrixA);
}
为什么这是段错误?我检查了分配给matrixA的大小,它看起来是正确的大小(4,000,000)
标准警告:不要投'无效*'由'malloc返回()'。还要注意,数组索引和大小的正确类型是...'size_t'。 – Olaf
另外请注意'rand()%10'很可能不会有统一的分布。但是这应该不成问题,因为无论如何,每次调用都会得到相同的值。 – Olaf
关于为什么这些特定尺寸是它选择错误的尺寸的任何想法? – scrblnrd3