我有一個處理非常大的數組的程序,當我試圖用隨機值填充數組時,它總是在特定索引處進行段錯誤。在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