2013-12-03 2 views
0

Мне нужно вычислить матричный продукт с помощью прямого расчета. Я написал следующий код:Программа останавливается без ошибок

template <typename T> 
void multiplicate_straight(T ** A, T ** B, T ** C, int sizeX) 
{ 
    T ** D = AllocateDynamicArray2D<T>(sizeX, sizeX); 
    transpose_matrix(B, D,sizeX); 
    for(int i = 0; i < sizeX; i++) 
    { 
     for(int j = 0; j < sizeX; j++) 
     { 
      for(int g = 0; g < sizeX; g++) 
      { 
       C[i][j] += A[i][g]*D[j][g]; 
      } 
     } 
    } 
    FreeDynamicArray2D<T>(D); 
} 

С size = 12 все работает, но когда я устанавливаю значение 14, программа закрывает себя не бросать какие-либо ошибки, возвращаемое значение равно 0. Тип данных моих матриц double.
Есть ли проблема в моем коде, или почему я не получаю ошибки, но результата тоже нет? Матрицы A и B инициализируются случайными величинами, C полностью равен нулю.
Edit: Allocation Code:

template <typename T> T ** AllocateDynamicArray2D(int nRows, int nCols) 
    { 
      T **dynamicArray; 

      dynamicArray = new T*[nRows]; 
      for(int i = 0 ; i < nRows ; i++) 
      dynamicArray[i] = new T [nCols]; 

      return dynamicArray; 
    }; 

int sizeX = 14; 

Спасибо!

+0

Является ли ваш 'A' или' B' стек/статический выделенный? –

+0

@ C.R .: A и B выделяются через AllocateDynamicArray (sizeX, sizeX), но я не знаю, были ли они выделены в стек. –

ответ

0

Если это закрытие, вероятность того, что это сбой, вы должны использовать try-catch. Распечатайте содержимое всех зацепившихся ошибок в журнале или на консоли.

+0

Ошибка: Плохое размещение. Так что это значит? Означает ли это, что я пишу за пределами границ массива? –

+0

@arc_lupus - показать код выделения. сбой памяти. может быть, что 'sizeX' имеет незаконное значение. что это? – egur

+0

@egur: Сделано, редактирование в моем открытии. –

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