Я написал следующий код для тестирования в int main()
int main() {
int *p1 = findmatrixsize("inputmatrix.txt","A");//A function gets matrix size
cout << p1[0] << endl << p1[1] << endl;
int *p2 = findmatrixsize("inputmatrix.txt","B");
cout << p2[0] << endl << p2[1] << endl;
double **C = normalmultiplication("inputmatrix.txt","A", "B");
cout << C[0][0] << endl;
ofstream fout;
const string s="outputmatrix.txt";
fout.open(s);
for(int i=0;i<p1[0];i++){
for(int j =0;j<p2[1];j++){
fout << C[i][j] << " ";
}
fout<< endl;
}
fout.close();
return 0;
}
Все работает, кроме случаев, когда я выполняю многострочную печать. Вот проблема:
1. Если я закомментирую часть печати, p1[0],p1[1],p2[0],p2[1],C[i][j]
дает мне идеальный и правильный результат, который я хочу.
2. Однако, когда я печатаю с использованием нормальных циклов, это не работает. Но, но, но, если я изменю p1[0],p2[1]
в цикле for до конкретного числа, такого как 3 (когда размер моей матрицы равен 3), он снова работает.
3. Он компилируется, но часть для цикла печати не записывается в текст. Когда я изменил его на стандартную распечатку (не только одну строку, я имею в виду весь метод), я не смог увидеть их в терминале. Но, как я упоминал выше, когда я изменяю p [0] p [1] на 3, это работает, что означает, что я могу видеть их либо в txt, либо в терминале
Я никогда раньше не сталкивался с такой странной ситуацией в C ++, поэтому я надеюсь, что кто-нибудь может мне помочь!
К вашему сведению, я использую Visual Studio 2010 в качестве компилятора.
Спасибо за вашу помощь!
Мы не знаем что findmatrixsize
а также normalmultiplication
делать.
Но если они делают то, что я думаю, что они делают (и я думаю, что они возвращают указатели на свои локальные данные), объекты, на которые ссылается p1
, p2
а также C
поделиться хранилищем.
Проверить, если p1 == p2
,
Проблема в том, как вы получаете результат от функций findmatrixsize и normalmultiplication: они сохраняют результат вычисления в стеке и возвращают указатель на него, но стек уничтожается вскоре после того, как эти функции завершат свою работу. Переопределите эти функции, чтобы место в памяти действовало за пределами этих функций. Например,
int p1[2];
findmatrixsize("inputmatrix.txt","A", p1)
и поместите результат внутри findmatrixsize в последний аргумент, например.
void findmatrixsize(const char* fileName, const char* matrixName, int* result)
{
// routine
result[0] = someValue1;
result[1] = someValue2;
}