C矩阵和指针错误



此功能的此版本很好:

int** outerProduct(int v[], int n){
    int i, j;
    int **a = malloc(n*sizeof(int*));
    for(i=0; i<n; i++){
        a[i] = malloc(n*sizeof(int));
    }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            *(*(a+i)+j) = v[i]*v[j];
        }
    }
    return a;
}

这不起作用:

int** outerProduct(int v[], int n){
    int i, j;
    int **a = malloc(n*sizeof(int*));
    for(i=0; i<n; i++){
        a[i] = malloc(n*sizeof(int));
    }
    for(i=0; i<n; i++){
        for(j=0; j<n; j++){
            *(a+(i*n)+j) = v[i]*v[j];
        }
    }
    return a;
}

错误是*(a+(i*n)+j) = v[i]*v[j];,但我不明白为什么。它应该是同一件事。

与二维数组不同,不能保证行在连续内存中。

如果您为整个n * n数组进行单个内存分配,则可以将其索引为将其用于1-D数组的数组时失败的方式。

相关内容

  • 没有找到相关文章

最新更新