我知道导致问题的代码行,但我不知道为什么。这是错误:
malloc: *** error for object 0x6080001416b0: Invalid pointer dequeued from free list *** set a breakpoint in malloc_error_break to debug
及相关代码: (我正在制作一种奇怪的宠物模拟器,你可以在那里建造狗,解释这些奇怪的狗的东西)
while (!quit)
{
while(SDL_PollEvent(&e) != 0)
{
switch(e.type)
{
case (SDL_QUIT):
quit = true;
case (SDL_KEYDOWN):
{
Dogpart newDogpart(100,20);
allDogparts.push_back(newDogpart); //the problem line
}
}
}
//game code
}
如果我注释掉这一行:
allDogparts.push_back(newDogpart);
当我触发SDL_KEYDOWN时它不会崩溃。
allDogparts是一个名为Dogpart
的结构的向量std::vector<Dogpart> allDogparts; //declared globaly
我在#34; while(!quit)&#34;之前添加了几个Dogpart's给这样的所有Dogs #s;游戏循环开始,但这些都没有问题:
allDogparts.push_back(Dogpart(50,10));
我认为这可能是一个范围问题,但是当我单步执行代码时,我添加的新部分似乎仍然存在。单步执行,一旦SDL_KEYDOWN注册并添加了新部分,我就会完全通过游戏循环,并且因为我不明白的原因而在此行崩溃:
while(SDL_PollEvent(&e) != 0)
任何帮助解决这个问题,甚至只是解释发生了什么都将非常感谢,谢谢。
Dogpart:
struct Dogpart{
public:
Dogpart(float x, float y);
float x, y, w, h;
Uint8 r,g,b;
void update();
void render(SDL_Renderer* renderer);
bool mouseOver;
v2 mouseClickOffset;
enum S_STATE
{
DEFAULT,
PRESSED, //clicked or touched down and held
RELEASED //one frame, after pressed is false
} s_state;
};
答案 0 :(得分:1)
在带Xcode的Mac上,您也可以使用“启用地址清理器”。 在Xcode 7.3中,选择“编辑方案”,然后选择“运行”或“测试”页面,“诊断”选项卡,并选中“启用地址清理程序”。
它提供类似于valgrind的内存损坏诊断。
答案 1 :(得分:0)
你已经破坏了你的堆。在linux上运行valgrind下的程序,它会指出你的错误。你也可以试试电围栏
如果不是linux,请指明您的平台