有人能向我解释一下为什么这段代码在最后一行运行时得到访问违反错误,而不是当h_A[0]设置为100时?
int nx = 16384;
int ny = 16384;
int nxy = nx*ny;
int nBytes = nxy * sizeof(int);
int *h_A;
h_A = (int *) malloc(nBytes);
h_A[0] = 100;
int *h_B;
h_B = (int *) malloc(nBytes);
h_B[0] = 100;
错误是:
编辑:Test.exe中0x01079554的未处理异常:0xC0000005:访问冲突写入位置0x00000000.
这是解决方案多亏了@owacoder
int nx = 1238;//8;
int ny = 16384;//6;
int nxy = nx*ny;
int nBytes = nxy * sizeof(int);
int *h_A;
if ((h_A = (int *) malloc(nBytes)) == NULL){
printf("Malloc failed...n");
return 0;
} else {
initialInt (h_A, nxy); // Fills matrix with numbers
}
int *h_B;
if ((h_B = (int *) malloc(nBytes)) == NULL){
printf("Malloc failed...n");
return 0;
} else {
initialInt (h_B, nxy); // Fills matrix with numbers
}
第二次分配失败,而第一次没有。(例如,malloc
返回NULL
,内存不足)您应该在代码中对内存不足条件进行错误检查。