我有以下C代码:

int dimension;
double *AtS;
...
AtS=(double*)malloc(sizeof(double)*dimension);

for (i=0; i<dimension; i++)
{
  AtS[i]=0.0;
}

虽然dimension约为600-800万,但工作正常,但当它大约为3亿时,由于访问冲突而失败调试中出现以下消息:
mathpro.exe中0x012f1077处的未处理异常:0xc000005:访问冲突写入位置0x00000000。
如果我使用memset()而不是cycle,同样的情况。
有什么办法可以解决这个问题吗?

最佳答案

手册解释了“访问冲突写入位置0x00000000”
http://man7.org/linux/man-pages/man3/malloc.3.html#RETURN_VALUE
出错时,这些函数返回空值。
或者如果你喜欢http://www.cplusplus.com/reference/cstdlib/malloc/
返回值
成功时,指向由
功能此指针的类型始终为void*,可以是
转换为所需类型的数据指针,以便
可解引用。如果函数未能分配请求的
内存块,返回空指针。
您遇到错误。很可能是记性不好。
如果在将值传递给malloc之前检查它,您会发现它确实是一个相当大的数字。

关于c - 尝试填充动态数组时发生访问冲突(大量项目),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30849601/

10-13 03:32