2015-01-11 72 views
2

我正在研究C++程序,該程序應該將火焰強度的2D圖像轉換爲3D模型。該程序主要處理多個矩陣操作,我都使用指針來實現(我知道,我可以使用矢量)。 輸入文本文件後,對數據值進行鏡像和平滑處理,然後對圖像的每一行進行校正計算。在此計算函數的開始處,程序停止在隨機位置上,但在for循環中聲明y_values向量。C++程序在沒有任何理由的情況下隨機停止

下面是代碼片段:

void CorrectionCalculation(Matrix Matrix_To_Calculate, int n_values, int polynomial_degree, int n_rows) 
{ 
    for (int h = 0; h < n_rows; h++) 
    { 
     //Initialising and declaration of the y_values-vector, which is the copy of each matrix-line. This line is used for the correction-calculation. 
     double* y_values = new double(n_values); 
     for (int i = 0; i < n_values; i++) 
     { 
      y_values[i] = Matrix_To_Calculate[h][i]; 
     } 

     //Initialisiing and declaration of the x-values (from 0 to Spiegelachse with stepwidth 1, because of the single Pixels) 
     double* x_values = new double(n_values); 
     for (int i = 0; i < n_values; i++) 
     { 
      x_values[i] = i; 
     } 

當計算一行,該程序工作得很好。但是當我添加一些代碼來計算整個圖像時,程序停止。

+0

'double * y_values = new double(n_values);'這不會產生數組,而是一個double元素。這個修正後程序的行爲如何(其中有兩個)? – lared

+1

「沒有理由」。是的,你的程序是完美的,C++思維的設計者是什麼。 – Blindy

+0

你是對的,我應該寫下「沒有明顯的理由(對我而言)」。 y_values和x_values的初始化是我忘記使用[]而不是()的唯一發生。相當惱人的是,沒有弄清楚這個失敗,但似乎我站在管道上。 –

回答

2

你沒有分配一個值的數組,而是一個元素。取而代之的 :

double* y_values = new double(n_values); 
// ... 
double* x_values = new double(n_values); 

將其更改爲

double* y_values = new double[n_values]; 
//... 
double* x_values = new double[n_values]; 

您應該使用雙打的vector,而不是數組新。這樣內存將在不再需要時自動刪除。例如:

#include <vector> 
std::vector<double> y_values(y_values); 

通過使用與參數相同的變量名稱,您也是hiding variables。這可能會導致代碼中的混淆和微妙的錯誤,因爲您不太確定哪個變量正在被更改。

+0

似乎這是程序停止工作在這個位置的錯誤....很煩人;)。非常感謝你。我還必須在x_values的初始化中編寫這種格式。儘管如此,它仍然停止...現在試圖找出錯誤。 –

+1

「考慮使用矢量」遠遠不夠強大。除非你有經驗,並且真的知道你在做什麼,否則沒有理由使用新的數組。我不記得在十年的C++編程中合法地使用它。 –

+0

好的,我會使用矢量。我只是使用了數組,因爲我們一直認爲這樣做 - 我認爲這主要是因爲了解C++。感謝您的支持。 –

相關問題