我一直在搞乱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;
}
让我感到困惑的是,在我免费通话后,我没有修改指针中的任何内容。关于什么事情的任何想法?
答案 0 :(得分:1)
当您向其添加n
时,指针不会(必然)增加n
个字节。它们增加sizeof(*p) * n
个字节。
因此,您将testStruct2
增加sizeof(STestStruct) * sizeof(STestStruct)
个字节,实在太多了。只需要添加1
,即&#34;移动到下一个STestStruct
对象的块。
答案 1 :(得分:1)
你想要
STestStruct* testStruct2 = testStruct + 1;
因为指针总是以其基本类型的大小为单位递增。