【发布时间】:2015-10-17 21:32:06
【问题描述】:
我一直在做一个求解微分方程的项目,并在 C++ 上做了一个工作,当我被告知要在 C 上做它时 我使用函数“new”来创建动态数组并需要将其更改为 malloc,所以我这样做了 :)
但我随机收到错误 255 和 -1073741819
您能帮我找出代码中的错误吗?
double **k=(double **)malloc(7 *sizeof(double*));
for(i=0; i<7; i++) k[i]=(double *)malloc(4 *sizeof(double));
double **b=(double **)malloc(7 *sizeof(double*));
for(i=0; i<7; i++) b[i]=(double *)malloc(6 *sizeof(double));
double *mn=(double *)malloc(7 *sizeof(double));
double *yy1=(double *)malloc(4 * sizeof(double));
double *yy2=(double *)malloc(4 * sizeof(double));
int *go;
go=1;
我不明白我是否错误地使用了 malloc?
感谢您的回复!
【问题讨论】:
-
您将指针的值设置为
1,这似乎很可疑。 -
不要将
malloc和朋友的结果投射到C中! -
Windows 中的运行时错误 0xC0000005 是“访问冲突”。如果您设置
int *go = 1,然后尝试访问“go”,这是您可以期待的;) -
除了对
malloc的返回值的冗余强制转换之外,分配一维和二维数组的总体思路似乎是合理的。但正如上面已经提到的,将int *go设置为 1 可能会为以后的灾难做好准备。你能告诉我们你以后用go做什么吗? -
好吧,我怀疑我在函数'double newh(double h, double y1, double y2, double y3, double y4, double *yy1, double *yy2, int *go, double **k, double *mn)' 它为我的近似值返回一个新步骤的值,我会根据我的新步骤是否小于 eps(允许的错误)来更改这个 '*go' 谢谢你的答案!