【问题标题】:Error 255 <0xFF> and -1073741819 <0xC0000005>错误 255 <0xFF> 和 -1073741819 <0xC0000005>
【发布时间】: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' 谢谢你的答案!

标签: c malloc


【解决方案1】:

正如他们在 cmets 中指出的那样,您不能将 int 值直接设置为指针,因为这会导致分段错误。

正确的做法是:

int * go;
int temp = 1;

go = &temp;

现在go指向temp的内存地址,所以*go的值就是1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-20
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2021-01-25
    • 2020-02-08
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多