2014-09-22 3 views
0

Я пытаюсь умножить на n ** x ** n динамические матрицы и вернуть результат. Это код для него:C++ Динамические матрицы Умножая возвращаемый выпуск

long long int** Multiply(long long int** m1, long long int **m2) 
{ 
    static long long int** output; 
    output= new long long int* [k]; 

    for (int i=0; i<k; i++) 
     output[k]= new long long int [k]; 

    long long int cellRes= 0; 
    for (int i=0; i<k; i++) 
    { 
     for (int f=0; f<k; f++) 
     { 
      for (int j=0; j<k; j++) 
      { 
       cellRes+= m1[i][j]*m2[j][f]; 
      } 
      output[i][f]= cellRes; 
      cellRes=0; 
     } 
    } 

    return output; 
} 

Это, кажется, делает это хорошо при возвращении новой матрицы, но по какой-то причине программа сбой после выполнения Multiply() ... Даже если я создаю новый матрицы, выделите его и затем назначьте ему Multiply(), он сработает.

Я не могу понять, что я делаю неправильно. Есть идеи?

+0

Почему выход статический? Используйте 'vector >' –

+0

Я где-то читал, что должен был объявить его статичным, чтобы избежать ссылки на не существующую позицию памяти. Вот где я получил это от: http: // www. tutorialspoint.com/cplusplus/cpp_return_pointer_from_functions.htm – BlastDV

+0

Во второй раз, когда вы вызываете функцию, она перезаписывает первый вывод, если вы не забудете его скопировать. Либо предоставить матрицу вывода в качестве другого параметра, либо использовать векторы и вернуть один по значению. –

ответ

2
for (int i=0; i<k; i++) 
    output[k]= new long long int [k]; 

должно быть:

for (int i=0; i<k; i++) 
    output[i]= new long long int [k]; 
     //^^^^ output[k] is out of bound and you allocate space for each row 
+0

Вы бог d *** прямо! Это был ответ. Сейчас он работает. Теперь мне нужно только убедиться, что объявление результата как статического не будет проблемой ... – BlastDV

Смежные вопросы