C++ C++;设置值时发生访问冲突错误

C++ C++;设置值时发生访问冲突错误,c++,malloc,access-violation,C++,Malloc,Access Violation,有人能给我解释一下为什么在最后一行运行时,而不是在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; 错误是:

有人能给我解释一下为什么在最后一行运行时,而不是在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
,内存不足)您应该在代码中进行内存不足情况的错误检查。

第二次分配失败,而第一次分配没有失败。(即
malloc
返回
NULL
,内存不足)您应该在代码中对内存不足的情况进行错误检查。

因为您没有检查
malloc
是否成功。您是否觉得有必要尝试一次分配大约1GB的内存,然后设置一个适合char的值,或者这完全与上下文无关?如前所述,您的第二个malloc可能会失败。。。如果非要我猜的话,那是因为32位进程占用的可寻址空间太多了。@AJG85是一个类。我们应该使用大量的数字来测试CUDA和CPU计算之间的差异。因为您没有检查
malloc
是否成功。您是否觉得有任何特殊原因需要尝试一次分配大约1GB的内存,然后设置一个适合char的值,或者这完全脱离上下文?如前所述,您的第二个malloc可能会失败。。。如果非要我猜的话,那是因为32位进程占用的可寻址空间太多了。@AJG85是一个类。我们应该使用大量的数字来测试CUDA和CPU计算之间的差异。谢谢!那正是我需要的。谢谢!这正是我所需要的。