gpt4 book ai didi

c++ - "Invalid pointer dequeued from free list",malloc_error_break 中的断点没有帮助

转载 作者:行者123 更新时间:2023-11-30 05:40:32 25 4
gpt4 key购买 nike

我知道导致问题的代码行,但我不知道为什么。这是错误:

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 的结构 vector

std::vector<Dogpart> allDogparts; //declared globaly

在“while(!quit)”游戏循环开始之前,我像这样向 allDogparts 添加了几个 Dogpart,但这不是问题:

allDogparts.push_back(Dogpart(50,10));

我认为这可能是一个范围问题,但当我单步执行代码时,我添加的新部分似乎仍然存在。单步执行,一旦 SDL_KEYDOWN 注册并添加了新部分,我就完成了游戏循环,但由于我不明白的原因它在这条线上崩溃了:

while(SDL_PollEvent(&e) != 0)

任何解决此问题的帮助,甚至只是解释正在发生的事情,我们都将不胜感激,谢谢。

狗的部分:

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;
};

最佳答案

在装有 Xcode 的 Mac 上,您还可以使用“Enable Address Sanitizer”。在 Xcode 7.3 中,选择“编辑方案”,然后选择“运行”或“测试”页面、“诊断”选项卡并选中“启用地址 sanitizer ”。

它提供类似于 valgrind 的内存损坏诊断。

关于c++ - "Invalid pointer dequeued from free list",malloc_error_break 中的断点没有帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31576827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com