2016-06-12 105 views
-1

我试图做一个一维数组在C 89401个元素:抛出异常错误

double **A = (double**)malloc(89401*sizeof(double*)); 

for (i = 0; i<89401; i++)  

    A[i] = (double*)malloc(89401*sizeof(double)); 

但我不断收到此错误:

Exception thrown at 0x003F61E0 in final project 2.exe: 0xC0000005: Access violation writing location 0x00000000. 

我不能找出问题所在。我在网站上搜索了以前提出的问题,但没有一个对我有所贡献。

如果有这种异常的处理程序,程序可能会安全地继续。

+0

在尝试将某个元素指定给它所指向的元素之前,请检查'A'是否不是'NULL'。 – MikeCAT

+1

如果'sizeof(double)'是8,这将需要大约59.5GB的内存。你的系统有足够的RAM(+ swap)来存储这些大数据吗? – MikeCAT

+1

**始终**检查与程序执行相关的功能错误结果。另外,不要在C中一般投放'malloc'&friends或'void *'的结果! – Olaf

回答

1

你犯了两个错误。 第一个是,你说,你试图创建“89401大小的1d数组”。事实上,你尝试分配89401 * 89401双打,这似乎是二维数组。正如@MikeCAT写的这是一个巨大的数字,89401 * 89401 * 8个字节,如果你有8个字节的双打。 第二个问题是,当malloc的内存分配不成功时,即结果为NULL时,您不处理。