這是我的代碼:C++指針 「錯誤:雙重釋放或腐敗(出)」
uint16_t * ptemparr = new uint16_t[20];
for (int x=0;x<2;x++)
{
function(ptemparr);
ptemparr ++;
}
delete[] ptemparr;
當我這樣做,我得到這個錯誤:
double free or corruption (out)
編輯: 謝謝我明白爲什麼我會得到這個錯誤,現在你認爲這是一個更好的主意嗎?
uint16_t temparr[20];
uint16_t * ptemparr = temparr;
for (int x=0;x<2;x++)
{
function(ptemparr);
ptemparr ++;
}
這樣我就把指針放在堆棧上,並且沒有內存泄漏問題。 此外,該代碼上面有跑每1秒,所以請記住你讓我知道什麼是造成這種狀況
爲什麼你不使用括號進行索引? – tartar 2012-03-28 05:00:43
funtion在ptemparr中返回一個數組,上面的代碼僅僅用於說明目的,++實際上是一個ptemparr = ptemparr + 4 – Kam 2012-03-28 05:03:53
@Kam,如果你總是分配x(x = 20代碼片段),那麼你最好使用靜態分配,即使每秒一次「很少」,靜態分配和動態分配之間的差異在時間上會消失。然後,使用堆棧或堆是一個有趣的問題:如果該向量需要在塊外部訪問,堆是強制性的。 – Enzo 2017-11-14 08:28:14