简单函数的分段错误(C ++)

时间:2014-05-09 22:10:13

标签: c++

这里我只想定义一个返回矩阵乘法的函数,其中N是任意的,我想生成一个带有" new"的矩阵。命令。

int **multiply(int **A, int **B, int N){
   int **C=new int*[N];
   for(int i=0;i<N;i++){
   for(int j=0;j<N;j++){
       for(int k=0;k<N;k++)
       C[i][j]=C[i][j]+A[i][k]*B[k][j];
     }
   }
   return (C);
}

输出看起来像

分段错误(核心转储)

每当我为C分配值时,我都有此错误,有人可以告诉我发生了什么以及如何修复它吗?

1 个答案:

答案 0 :(得分:0)

int **C声明一个指向指针的指针,因为在C \ C ++数组中是指针,C是一个数组数组。 new int*[N]创建外部数组,但不创建内部数组。在任何时候你都没有创建内部数组并将它们分配给C的单元格,所以C[#]包含垃圾(如果我没记错的话,0如果你在调试模式下编译,那么C[i][j]如果你使用发布模式之前在那个内存中)。当您使用C[i]时,由于0包含int **multiply(int **A, int **B, int N){ int **C=new int*[N]; for(int i=0;i<N;i++){ C[i]=new int[N]; // Create the inner array here for(int j=0;j<N;j++){ C[i][j]=0; // You need to initialize the cell or else it'll contain some random junk for(int k=0;k<N;k++) C[i][j]=C[i][j]+A[i][k]*B[k][j]; } } return (C); } 或垃圾,您会遇到段错误。

{{1}}