首页 > 解决方案 > 在 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"); 正常工作。那么为什么我会收到这个错误。我的数组列表有什么问题?

标签: cmemorymallocdynamic-arrays

解决方案


在函数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已经被赋值,但是yArrayInterpolinmain的内容yArrayInterpol还没有被初始化。


推荐阅读