我開始用C++進行編碼,最近我遇到了一個問題,我找不到解決方案,因爲我不明白我的錯誤。避免C++中的內存泄漏?
我的程序是將開爾文轉換爲攝氏溫度,但它不能在連續3個以上的溫度下進行。只要我通過4,它給我正確的轉換與內存問題(超出範圍?)。
錯誤「XXX」:雙人免費或損壞(出):0x0000000001c94c40
而當我進入四個以上溫度下,它給出了一些隨機數,這可能是其他不會忽略的值。
這是我的程序。
#include <iostream>
using namespace std;
unsigned int NumberT {0}; //Definition of the global variables
double* Kelvin=new double[NumberT];
double* Celsius=new double[NumberT];
unsigned int i=0;
double* Conversion (double, double, unsigned int) //Conversion function
{
for(unsigned int i=0;i<NumberT;++i)
{
Celsius[i]=Kelvin[i]-273.15;
}
return Celsius;
}
void printTemperatures (double, double, unsigned int) //Print function
{
for(unsigned int i=0;i<NumberT;++i)
{
cout<<"The temperature is "<< Kelvin[i] <<" [K], which is "<< Celsius[i] <<" [C]"<<endl;
}
return;
}
int main() //Main
{
cout<<"How many temperatures do you want to enter?"<<"\n";
cin>>NumberT;
cout<<"What are the temperatures?"<<"\n";
for (unsigned int i=0;i<NumberT;++i)
{
cin>>Kelvin[i];
}
Conversion (Kelvin[i], Celsius[i], NumberT);
printTemperatures (Kelvin[i], Celsius[i], NumberT);
delete [] Celsius;
delete [] Kelvin;
return 0;
}
所以我會很高興知道我的代碼有什麼問題,爲什麼它是這樣的。我聽說我們不應該使用全局變量,這可能會幫助我理解原因。
順便說一下,我有興趣就如何寫一個合適的代碼與一個良好的語法,沒有範圍問題一些建議。因爲我想學習如何編寫一個可能性最「普遍」的函數,以便我可以將它拉到另一個帶有其他變量的程序中。
預先感謝您的支持
PS:我用G ++作爲編譯器和2011年的C++標準
當您進行內存分配時,NumberT'爲0 - 在'main'內移動全局變量和內存分配,首先讀取'NumberT'的值,然後執行實際的內存分配。你也應該正確地設置你的代碼格式 - 你有一些其他的錯誤,一旦格式化代碼會變得更加明顯。 –
你真的應該使用'std :: vector'而不是'double *'。 –
NathanOliver
你分配的數組的大小爲0.我不記得這樣的動作本身是不是一個未定義的行爲,而是試圖將數據寫入這樣的數組 - 確切地說是。 –