这里我只想定义一个返回矩阵乘法的函数,其中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分配值时,我都有此错误,有人可以告诉我发生了什么以及如何修复它吗?
答案 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}}