C:MSVC2008 Malloc和崩溃程序

时间:2010-07-16 16:01:09

标签: c malloc

这个问题可能有所补救,但我在使用malloc时遇到了很多麻烦。为什么我的程序会在释放内存时崩溃?

#include <stdlib.h>
#include <malloc.h>
int main(int argc, char *argv[]) {
    int *arr[10];
    void *mem = malloc( 10 * sizeof(int) );
    int i;
    for(i=0;i<=9;i++) {
        arr[i] = (int*) mem + i*sizeof(int);
        *arr[i]= 9-i;
    }
    //void** ar = (void**) arr;
    //medianSort(ar, cmp, 0, 9);
    free(mem); //crashes here
    return 0;
}

运行时错误消息框报告

  

Windows触发了一个断点   medianSort.exe。这可能是由于a   堆的腐败,这   表示medianSort.exe或中的错误   它加载的任何DLL。这个   也可能是由于用户按下   F12而medianSort.exe具有焦点。   输出窗口可能有更多   诊断信息。

以下是malloc.c中的错误块

#ifdef _WIN64
    return HeapAlloc(_crtheap, 0, size ? size : 1);
#else  /* _WIN64 */
    if (__active_heap == __SYSTEM_HEAP) {
        return HeapAlloc(_crtheap, 0, size ? size : 1); //crashes here
    } else
    if ( __active_heap == __V6_HEAP ) {
        if (pvReturn = V6_HeapAlloc(size)) {
            return pvReturn;
        }
    }

1 个答案:

答案 0 :(得分:0)

您正在编写超出已分配的内存。请注意(int*) memint指针,因此添加1实际上会将内存位置移动sizeof(int)个字节。换句话说,你不应该在循环中自己做sizeof(int),因为指针算法说编译器为你做了。