我试图为一个双类型数组分配内存,以便将其与GNU科学库一起使用。
用于此的代码类似于

double *x_i, *y_i, *x_e, *y_e, data[MAX_SIZE][2];
int n_i, n_e, n_data;
...
x_i = (double *)malloc(n_i * sizeof(double));
y_i = (double *)malloc(n_i * sizeof(double));
x_e = (double *)malloc(n_e * sizeof(double));
y_e = (double *)malloc(n_e * sizeof(double));
for (int i = 0; i < n_data; i++){
    if (data[i][1] > 0){
        x_e[i] = data[i][0];
        y_e[i] = data[i][1];
    }
    else{
        x_i[i] = data[i][0];
        y_i[i] = data[i][1];
    }
}

用n_i+n_e=n_数据。
显然,malloc 8岁以后,sizeof(x/y_e/i)应该是50*sizeof(double)的范围。for循环之后归属于x_e/i[i]y_e/i[i]的值不一致,它们随着我改变归属顺序而改变,有时返回-nandata[][]n_in_en_data的值与我的预期一致,如果我在for循环内打印x_e/i[i]y_e/i[i]值,它们看起来是正确的,但在该循环外它们会更改。
谢谢你,如果这是一个多余或不好的问题,很抱歉。

最佳答案

除了实际返回sizeof(x/y_e/i)(如其他用户所述),for循环不正确:
如果sizeof(double*),则您将始终遇到试图访问n_i + n_e == n_data将使您超出界限的情况。为了避免这种情况,您可以分别跟踪x/y_e/i[i]x/y_e的索引,可能如下所示:

int i_e = 0, i_i = 0;

for (int i = 0; i < n_data; i++){
    if (data[i][1] > 0){
        x_e[i_e] = data[i][0];
        y_e[i_e] = data[i][1];
        i_e++;
    }
    else{
        x_i[i_i] = data[i][0];
        y_i[i_i] = data[i][1];
        i_i++;
    }
}

循环结束时,您应该发现x/y_i和分配给i_e + i_i == n_datax_e/i的值是一致的。

关于c - c-malloc不适用于 double 类型数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46534211/

10-09 17:48
查看更多