c++ - 内存分配问题 C/Cpp Windows 严重错误

标签 c++ windows memory allocation

我有一个代码需要从 C 语言“翻译”到 Cpp,但我无法理解,哪里出了问题。有一个部分,它崩溃了(windows 严重错误发送/不发送):

 nDim = sizeMax*(sizeMax+1)/2;
 printf("nDim  = %d sizeMax = %d\n",nDim,sizeMax);
 hamilt = (double*)malloc(nDim*sizeof(double));
 printf("End hamilt alloc. %d allocated\n",(nDim*sizeof(double)));
 transProb = (double*)malloc(sizeMax*sizeMax*sizeof(double));
 printf("End transProb alloc. %d allocated\n",(sizeMax*sizeMax*sizeof(double)));
 eValues = (double*)malloc(sizeMax*sizeof(double));
 printf("eValues allocated. %d allocated\n",(sizeMax*sizeof(double)));
    eVectors  = (double**)malloc(sizeMax*sizeof(double*));
 printf("eVectors allocated. %d allocated\n",(sizeMax*sizeof(double*)));
 if(eVectors) for(i=0;i<sizeMax;i++) {
                 eVectors[i] = (double*)malloc(sizeMax*sizeof(double));
                 printf("eVectors %d-th element allocated. %d allocated\n",i,(sizeMax*sizeof(double)));
                 }
 eValuesPrev = (double*)malloc(sizeMax*sizeof(double));
 printf("eValuesPrev allocated. %d allocated\n",(sizeMax*sizeof(double)));
 eVectorsPrev  = (double**)malloc(sizeMax*sizeof(double*));
 printf("eVectorsPrev allocated. %d allocated\n",(sizeMax*sizeof(double*)));
 if(eVectorsPrev) for(i=0;i<sizeMax;i++) {
                     eVectorsPrev[i] = (double*)malloc(sizeMax*sizeof(double));
                     printf("eVectorsPrev %d-th element allocated. %d allocated\n",i,(sizeMax*sizeof(double)));
                     }

日志:

nDim  = 2485 sizeMax = 70
End hamilt alloc. 19880 allocated
End transProb alloc. 39200 allocated
eValues allocated. 560 allocated
eVectors allocated. 280 allocated 

所以它在分配循环开始时崩溃了。如果我删除这个循环,它会在下一行分配时崩溃。这是否意味着像这样的数字我没有足够的内存??

谢谢。

最佳答案

在我的机器上,这个程序编译、执行没有错误,并且在通过 valgrind 运行时报告没有内存问题。除非您在小型嵌入式系统上运行,否则您的问题很可能是此代码之外的问题,因为此程序分配的内存总量小于 140 KiB。

此外,当malloc 失败时,它不会崩溃,它会返回NULL。这段代码正确地检查了 eVectorsPrev 是否为 NULL,因此这里应该没有 NULL 取消引用问题。

关于c++ - 内存分配问题 C/Cpp Windows 严重错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2487010/

相关文章:

c++ - C++语法 header 文件错误

Windows 7 : cmd. exe : setting startup directory (in a link to cmd. exe)

windows - 处理公司防火墙添加自签名证书

c++ - c :\users be delete when delete windows account?下一个用户账号的文件夹怎么弄

c - 从用户那里获取内存地址

c++ - 这段代码会导致内存泄漏吗?

c++ - 适用于原始指针上的迭代器以及 unique_ptr 上的迭代器的模板化函数

c++ - 如何初始化 C 字符串数组(无 STL)

java动态内存分配

c - 对于整数的小值是浪费内存空间