2013-11-26 17 views
1

所以下面的代碼引起的錯誤:堆塊改性過去要求2錯誤的大小用C

ERROR
// free pointers created with malloc 
for (int i = 0; i < 3; i++) { 
    if (rt_offset_rs[i] != NULL) { 
     free(rt_offset_rs[i]); // <== AT THiS LINE 
    } 

:在0000000000331DD0 堆塊在0000000000331DE2過去改性請求大小的2

我根本不理解這個錯誤。 以下是我操縱指針rt_offset_rs代碼:

  char** rt_offset_rs; 
    rt_offset_rs = malloc(3 * sizeof(char*)); 
    if (rt_offset_rs == NULL) { 
     fprintf(outputFilePointer, "no more memory"); 
     exit(1); 
    } 

    for (int i = 0; i < 3; i++) { 
     rt_offset_rs[i] = malloc(2 * sizeof(char)); 
     if (rt_offset_rs[i] == NULL) { 
      fprintf(outputFilePointer, "no more memory"); 
      exit(1); 
     } 
    } 

回答

2

的錯誤是不與free()通話,但在此之前的地方,只有你的系統檢查只在某些情況下溢出,其中之一是free ,而不是每次寫入緩衝區。

這不是你的代碼的一部分,但似乎你分配兩個字節,並寫入至少3到緩衝區(如果它是一個字符串 - 不要忘了空結束是另一個字節)

+0

我明白你的意思了,我把它們全部改爲3,但它不能解決我的問題。但是,謝謝 –

+0

如果您顯示更多相關的代碼,我們可能會幫助更多。 – MByD

0

當我做下面的事時,我遇到了這個問題。

#include <malloc.h> 
int main() 
{ 
    const char* s = "123"; 
    void** p = (void**)malloc(1); 
    *p = (void*)s; 
    free(p); 
} 

的代碼調用以下錯誤在一個構建:

HEAP[XXX.exe]: Heap block at 000001C207A21D60 modified at 000001C207A21DA5 past requested size of 35

的代碼調用以下錯誤在一個的Win32構建:

HEAP CORRUPTION DETECTED: after Normal block (#93) at 0x00636110. CRT detected that the application wrote to memory after end of heap buffer.

malloc的線是錯的。應修改如下:

void** p = (void**)malloc(1*sizeof(void*)); 

因爲sizeof運算的指針是sizeof(void*)字節,不是一個字節!