【发布时间】:2017-08-03 06:49:18
【问题描述】:
有哪些可能的情况可以让下面的代码执行下面sn-p中的if条件?就我而言,我无法说明if 语句执行的任何原因。
#include <stdio.h>
#include <stdlib.h>
void main(void){
int Nod = 1024 * 8; //Nod contains the number of nodes
double *MM; //MM is a square matrix it can contain very large number of data 10^10
MM = calloc(8 * Nod * 8 * Nod, sizeof(double));
if (MM == NULL)exit(0);
//then MM will then be passed to some other functions say
eigenvalue(MM);}
我正在使用在一个非常大的程序中间进行此检查的 FEM 代码。有趣的事实是,当我运行代码时,它显示出异常行为。有时程序就在这里停止。有时它工作得很好。值得一提的是,当程序以粗网格运行时,即当Nod 需要计算的节点数量较少时,程序运行良好。但是当使用精细的网格时,不幸的是程序崩溃了。该程序在具有 128GB 内存的迷你工作站中运行。该程序占用 1GB(左右)的 RAM。
【问题讨论】:
-
该特定程序总是以零状态返回,无论采用何种分支。当执行到达其右括号并返回时,主函数(并且只有主函数)具有隐式
return 0;。 -
8 * Nod * 8 * Nod是 2³² 所以整数溢出。使用比int更大的类型。 -
阅读手册页了解 calloc 和可能的返回值。
-
如果您使用的是稀疏矩阵,您可以只存储在地图或无序地图上填充的单元格。无需分配大量内存。
-
大号给谁?
Nod?Nod仅表示要计算多少节点,这完全在int数据类型的范围内。
标签: c dynamic-allocation calloc finite-element-analysis