동적으로 할당 된 두 행렬 A, B를 곱하는 C++ 함수를 작성하려고합니다. 저는 현재 곱셈 코드가 작동하도록 노력하고 있습니다. 그런 다음 함수로 변환하려고 시도 할 것입니다. 지금 나는 일종의 오류가 발생하고있다. "segmentation fault (코어 덤프)". 나는 그것을 내 코드의 곱셈 부분으로 좁혔지만 무엇이 잘못되었는지는 모른다. 누군가 나를 기쁘게 도와 줄 수 있습니까? 내 코드는 아래와 같습니다.동적으로 할당 된 메모리를 사용하는 C++ 곱셈 행렬
#include <iostream>
#include <cassert>
int main()
{
int rowsA = 5; // number of rows
int colsA= 3; // number of coloumns
// dynamically allocating A
double** A;
A = new double* [rowsA];
A[0] = new double [rowsA*colsA];
for (int i = 1; i < rowsA; i++)
{
A[i] = A[i-1] + colsA;
}
// Storing elements of matrix A
for(int i = 0; i < rowsA; ++i)
{
for(int j = 0; j < colsA; ++j)
{
std::cout << "Enter element A" << i + 1 << j + 1 << " : ";
std::cin >> A[i][j];
}
}
int rowsB = 3; // number of rows
int colsB = 5; // number of coloumns
// dynamically allocating B
double** B;
B = new double* [rowsB];
B[0] = new double [rowsB*colsB];
for (int i = 1; i < rowsB; i++)
{
B[i] = B[i-1] + colsB;
}
// Storing elements of matrix B
for(int i = 0; i < rowsB; ++i)
{
for(int j = 0; j < colsB; ++j)
{
std::cout << "Enter element B" << i + 1 << j + 1 << " : ";
std::cin >> B[i][j];
}
}
// checking matrix multiplication qualification
assert(colsA == rowsB);
// dynamically allocating C
double** C;
C = new double* [rowsA];
C[0] = new double [rowsA*colsB];
for (int i = 1; i < rowsA; i++)
{
C[i] = C[i-1] + colsB;
}
// Initializing elements of matrix C to 0
for(int i = 0; i < rowsA; ++i)
{
for(int j = 0; j < colsB; ++j)
{
C[i][j]=0;
}
}
// multiplication
for(int i = 0; i < rowsA; ++i)
{
for(int j = 0; j < colsB; ++j)
{
for(int k = 0; k < colsB; ++k)
{
C[i][j] += A[i][k] * B[k][j];
}
}
}
// Displaying the multiplication of matrices A, B
std::cout<< "Matrix C: " << std::endl;
for(int i = 0; i < rowsA; ++i)
{
for(int j = 0; j < colsB; ++j)
{
std::cout << " " << C[i][j];
if(j == colsB-1)
{
std::cout << std::endl;
}
}
}
// deallocation
delete[] C[0];
delete[] C;
delete[] B[0];
delete[] B;
delete[] A[0];
delete[] A;
}
당신은 2 차원 동적으로 할당 된 배열의 각 행을 할당해야합니다 https://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in-c-using-new – Brandon
안녕하세요. 고맙습니다. 나는 그것을했다. 곱셈을 주석 처리하고 C (모두 0으로 초기화 됨)를 인쇄하도록 내 코드에 요청하면 콘솔로 출력합니다. 또한 코드를 수정할 때 A와 B를 인쇄합니다. 그래서 곱셈 부분에 문제가 있다고 생각합니다. – Rebecca