0
내 코드가 잘못되었습니다? 이런 오류가 있습니다.동적 배열 C++ 액세스 위반 쓰기 위치
mnozenie_macierzy.exe의 처리되지 않은 예외는 0x00d21673입니다. 0xC0000005 : 0xcdcdcdcd 위치 쓰기 액세스 위반입니다.
첫 번째 배열을 만들고 두 번째 배열을 반으로 만듭니다. 프로그램은 배열을 곱합니다. 내 영어로 죄송합니다. 올바르지 않을 경우. 날 이해 해주길 바래.
#include <iostream>
#include <time.h>
using namespace std;
void losowa_tablica(int **tab1, int **tab2, int a, int b, int c, int d)
{
int i, j;
for(i=0; i<a; i++)
{
cout << endl;
for(j=0; j<b; j++)
{
tab1[i][j]=rand();
cout << "tab1[" << i << "][" << j << "] : \t" << tab1[i][j] << "\t";
}
}
cout << endl;
for(i=0; i<c; i++)
{
cout << endl;
for(j=0; j<d; j++)
{
tab2[i][j]=rand();
cout << "tab2[" << i << "][" << j << "] : \t" << tab2[i][j] << "\t";
}
}
cout << endl << endl;
}
int **mnozenie(int **tab1, int **tab2, int a, int b, int c, int d)
{
int g, suma, i, j;
int **mac=new int*[a];
for(int i=0; i<d; i++)
mac[i]=new int[d];
for(i=0; i<a; i++)
for(j=0; j<d; j++)
{
g=b-1, suma=0;
do
{
suma+=tab1[i][g]*tab2[g][j];
g--;
}while(g!=0);
mac[i][j]=suma;
}
return mac;
}
int main()
{
int a,b,c,d;
cout << "Podaj liczbe wierszy pierwszej macierzy: " << endl;
cin >> a;
cout << "Podaj liczbe kolumn pierwszej macierzy: " << endl;
cin >> b;
cout << "Podaj liczbe wierszy drugiej macierzy: " << endl;
cin >> c;
cout << "Podaj liczbe kolumn drugiej macierzy: " << endl;
cin >> d;
int **tab1=new int*[a];
for(int i=0; i<b; i++)
tab1[i]=new int[b];
int **tab2=new int*[c];
for(int i=0; i<d; i++)
tab2[i]=new int[d];
losowa_tablica(tab1, tab2, a, b, c, d);
if (b==c)
{
cout << "Mnozenie wykonalne" << endl;
int **mno=mnozenie(tab1, tab2, a, b, c, d);
}
else cout << "Mnozenie niewykonalne" << endl;
system("pause");
}
'b> a' 또는'd> c'이면 곤란을 겪을 것입니다 (아마'i
마음을 다시 잡아야합니다. 예를 들어,'a' 엘리먼트의 배열을 할당한다면, 'b'가 아닌 0부터'a'까지 iterate해야합니다! –
배열을 2D로 만들고 크기를 사용자에게 부여하고 싶습니다. – NMM