1. 程式人生 > 其它 >HEAP CORRUPTION DETECTED 錯誤原因與解決

HEAP CORRUPTION DETECTED 錯誤原因與解決

一、錯誤如下:

    

  這個錯誤是說在0x01F641A8處發生堆問題,下一句是說在堆buffer末尾記憶體中寫入了數值。

二、錯誤原因

  這個問題顯然在動態分配、釋放時記憶體才會發生的。在解決這個問題問題前首要要了解在new和delete時堆中的記憶體是怎麼分配的,是什麼記憶體結構?

引用《c++反彙編與逆向分析技術揭祕》中的內容:

    

    

   

  從上面的知識可以看出,在使用new進行堆空間分配的時候,實際上每個堆節點採用雙鏈表的資料結構,在記憶體中賦予一個結構體的記憶體大小,這個結構體包含了上、下一個堆的地址、本次堆資料分配的大小、堆的越界標示符等訊號。

在看看我的程式,其中的一段源程式是:

3、錯誤範例程式碼

  出現這種錯誤一般都是使用者指標時,開闢了一塊空間,但是使用時卻超出了這塊範圍,程式在釋放記憶體時找不到堆的越界標示符,無法釋放這塊記憶體導致的錯誤。

  如下程式碼,開闢了4個int記憶體,但是使用時,卻使用了後面的4個位元組,就會導致程式崩潰。

#include <iostream>
#include <windows.h>

int main()
{
    int* nBuff = new int[4];

    for (int i = 0; i < 5; i++)
    {
        fBuff[i] 
= i; } delete []fBuff;

  return 0; }
111