mình đang làm bài tập nhân 2 ma trận thưa, chương trình k có errors nhưng lúc chạy thì bị break vào báo như vầy
“Unhandled exception thrown: write access violation.
s2T->element was 0xA7B12DCE.”
struct Element {
int i, j;
int value;
};
struct SparseMatrix
{
int M, N, num; // num so phan tu khac 0
struct Element* element;
};
SparseMatrix* mul(SparseMatrix s1, SparseMatrix s2)
{
//////your code here/////
SparseMatrix* result;
SparseMatrix* s2T;
if (s1.N != s2.M )
{
return nullptr;
}
s2T = new SparseMatrix;
s2T->M = s2.N;
s2T->N = s2.M;
s2T->num = s2.num;
s2T->element = new Element[s2T->num];
for (int i = 0; i < s2T->num; i++) // mình gán ở đây thì k sao
{
s2T->element[i].i = 0;
s2T->element[i].j = 0;
s2T->element[i].value = 0;
}
int* count = new int[s2.N + 1];
for (int i = 1; i <= s2.N; i++)
count[i] = 0;
for (int i = 0; i < s2.num; i++)
count[s2.element[i].j]++;
int* index = new int[s2.N + 1];
index[0] = 0;
for (int i = 1; i <= s2.N; i++)
{
index[i] = index[i - 1] + count[i - 1];
}
for (int i = 0; i < s2.num; i++)
{
int rpos = index[s2.element[i].j]++;
s2T->element[rpos].i = s2.element[i].j; // chương trình báo lỗi ở đây
s2T->element[rpos].j = s2.element[i].i;
s2T->element[rpos].value = s2.element[i].value;
}
result = new SparseMatrix;
int n = s1.num + s2.num;
result->M = s1.M;
result->N = s2.N;
result->num = n;
result->element = new Element[n];
int apos, bpos,i;
i = 0;
for ( apos = 0; apos < s1.num;)
{
int r = s1.element[apos].i;
for (bpos = 0; bpos < s2T->num;)
{
int c = s2T->element[bpos].i;
int tempa = apos;
int tempb = bpos;
int s = 0;
while (tempa < s1.num && s1.element[tempa].i ==r &&
tempb <s2T->num && s2T->element[tempb].i ==c )
{
if (s1.element[tempa].j < s2T->element[tempb].j)
tempa++;
if (s1.element[tempa].j > s2T->element[tempb].j)
tempb++;
else
{
s += s1.element[tempa++].value * s2T->element[tempb++].value;
}
}
if (s != 0)
{
result->element[i].value = s;
result->element[i].i = r;
result->element[i].j = c;
i++;
}
while (bpos < s2T->num && s2T->element[bpos].i == c)
bpos++;
}
while (apos < s1.num && s2T->element[apos].i == r)
apos++;
}
////// end your code /////
}