c - 在 C 中返回错误:-1073741819 (0xC0000005)
问题描述
我用 C 编程,我正在测试我的程序,但我不明白为什么会收到错误 -1073741819 (0xC0000005)。这是代码:
#include <stdio.h>
#include <stdlib.h>
double interpol(double x0, double y0, double x1, double y1, double h) {
double ergebnis = (y1 - y0) / (x1 - x0) * h;
printf("%.2f\n", ergebnis);
return ergebnis;
}
void interpol_array(double *x_org, double *y_org, int dim_org,
double *x_int, double *y_int, int dim_int,
int n) {
int j, i;
double h;
i = 0;
y_org[0] = y_int[0];
for (j = 1; j < dim_int; j++) {
if (j % (n + 1) == 0 && j != 0) {
i++;
x_int[j] = x_org[i];
y_int[j] = x_org[i];
continue;
}
printf("%.2f ", y_org[0]);
}
}
int main() {
/* Pointer erzeugen auf null setzen */
double *xArrayOriginal = NULL;
double *yArrayOriginal = NULL;
double *xArrayInterpol = NULL;
double *yArrayInterpol = NULL;
/**/
int dimOriginal = 2;
int n = 3;
int dimInterpol = (n + 1) * (dimOriginal + 1) - n; /*+1 wegen der null*/
int i, j;
double h;
/* Array für die Originalwerte erzeugen */
xArrayOriginal = (double *)malloc(dimOriginal * sizeof(double));
yArrayOriginal = (double *)malloc(dimOriginal * sizeof(double));
/*Array für das Interpolierte Array erzeugen*/
xArrayInterpol = (double *)malloc(dimInterpol * sizeof(double));
yArrayInterpol = (double *)malloc(dimInterpol * sizeof(double));
xArrayOriginal[0] = 0;
xArrayOriginal[1] = 1;
xArrayOriginal[2] = 2;
yArrayOriginal[0] = 2;
yArrayOriginal[1] = 4;
yArrayOriginal[2] = 8;
interpol_array(xArrayOriginal, yArrayOriginal, dimOriginal, xArrayInterpol,
yArrayInterpol, dimInterpol, n);
return 0;
}
在我的程序中,我有 4 个动态数组。2 个动态数组用于原点 x 和 y 值,2 个动态数组用于插值 x 和 y 值。我没有对完整的插值进行编程,因为我遇到了一个错误。因此,我搜索了错误,发现当我使用时,
printf("%.2f ", y_org[0]);
我得到了你可以在上面看到的错误。只有当我将其更改为它时才能
printf("test");
正常工作。那么为什么我会收到这个错误。我的数组列表有什么问题?
解决方案
在函数main
中,行
int dimOriginal = 2; ... xArrayOriginal =(double *)malloc(dimOriginal*sizeof(double)); yArrayOriginal =(double *)malloc(dimOriginal*sizeof(double));
为每个数组分配 2 个double
元素。然而,线条
xArrayOriginal[2] =2; ... yArrayOriginal[2] =8;
写出这些数组的边界,因为唯一有效的元素编号是 0 和 1。这会导致未定义的行为。
此外,在 functioninterpol_array
中,以下行会导致未定义的行为:
y_org[0] = y_int[0];
这是因为iny_int
已经被赋值,但是yArrayInterpol
inmain
的内容yArrayInterpol
还没有被初始化。
推荐阅读
- java - java中的类`Class`和类`Type`有什么区别?
- sql - 根据时间和日期对值求和
- sql - Oracle:如何进行数据透视查询?
- excel - 如何在vlookup中为左函数编写excel vba编码,或从excel函数转换为vba?
- api - 将图表从本地文件上传到 StockTwits API 的正确语法是什么?
- c# - 如何在 Bouncy Castle 和 C# 中使用 Aria 加密算法
- r - ggplot2 重新排序多个组
- javascript - 在 for ... of 循环中处理未定义?
- performance - 为什么在 Rust 中迭代整数向量比在 Python、C# 和 C++ 中慢?
- r - 在 Pinhiero 和 Bates 书中实现非线性混合效应模型收敛的问题