HeapFree已触发断点

时间:2014-06-15 22:25:57

标签: c++ free

我一直在搞乱malloc和free并且我遇到了一个问题,当我打电话给免费视觉工作室时说我的程序触发了一个断点。这是我收到的错误:

HEAP:自由堆块5371d0在被释放后在537230处被修改

这是我的代码:

#include <malloc.h>


struct STestStruct
{
    STestStruct(int _a, int _b, int _c)
    : a(_a), b(_b), c(_c)
    {
    }

    int a;
    int b;
    int c;
};

int main(int argc, char** argv)
{
    void* myMem = malloc(sizeof(STestStruct) * 2);
    STestStruct* testStruct = (STestStruct*)myMem;
    (*testStruct) = STestStruct(1, 2, 3);

    // If I comment this and the next line out, everything is fine
    STestStruct* testStruct2 = testStruct + sizeof(STestStruct); 
    (*testStruct2) = STestStruct(1, 2, 3);


    free(myMem);

    return 0;
}

让我感到困惑的是,在我免费通话后,我没有修改指针中的任何内容。关于什么事情的任何想法?

2 个答案:

答案 0 :(得分:1)

当您向其添加n时,指针不会(必然)增加n个字节。它们增加sizeof(*p) * n个字节。

因此,您将testStruct2增加sizeof(STestStruct) * sizeof(STestStruct)个字节,实在太多了。只需要添加1,即&#34;移动到下一个STestStruct对象的块。

答案 1 :(得分:1)

你想要

STestStruct* testStruct2 = testStruct + 1; 

因为指针总是以其基本类型的大小为单位递增。