gpt4 book ai didi

c++ - _Block_Type_Is_Valid (pHead->nBlockUse) 错误

转载 作者:IT老高 更新时间:2023-10-28 22:03:37 25 4
gpt4 key购买 nike

我一直在从事一个新项目,但遇到了一个我不知道为什么会失败的问题。

当我执行此行删除 textY 时,给我错误 _Block_Type_Is_Valid (pHead->nBlockUse)。那我做错了什么?

这是源代码:

Text.h

 #ifndef TEXT_H
#define TEXT_H

typedef boost::shared_ptr<Font> FontPtr;

class Text
{
public:

Text(FontPtr font, char *text)
{
str = new char[35];
this->font = font; str = text;
}

Text(const Text& cSource);
Text& operator=(const Text& cSource);

~Text();
.
.
.
.

private:
FontPtr font;
char *str;
GLuint texture;
GLfloat pos_x, pos_y, width, height;
};

#endif

Text.cpp

Text::Text(const Text& cSource)
{
font = cSource.font;
texture = cSource.texture;
pos_x = cSource.pos_x;
pos_y = cSource.pos_y;
width = cSource.width;
height = cSource.height;

int sizeString = 35;
if (cSource.str)
{
str = new char[sizeString];
strncpy(str, cSource.str, sizeString);
}

else
{
str = 0;
}
}

Text& Text::operator=(const Text& cSource)
{
delete[] str;

font = cSource.font;
texture = cSource.texture;
pos_x = cSource.pos_x;
pos_y = cSource.pos_y;
width = cSource.width;
height = cSource.height;

int sizeString = 35;
if (cSource.str)
{
str = new char[sizeString];
strncpy(str, cSource.str, sizeString);
}

else
{
str = 0;
}

return *this;
}

Text::~Text()
{
delete[] str;
}

字体.h

#ifndef FONT_H
#define FONT_H

class Font
{
public:

Font(TTF_Font *font, SDL_Color color)
{
this->font = font; this->color = color;
}

~Font();
.
.
.

private:
TTF_Font *font;
SDL_Color color;

};

#endif

字体.cpp

Font::~Font()
{
TTF_CloseFont(font);
}

CGameApplication.cpp

.
.
.
.
void CGameApplication::initializeApplicationFonts()
{
TTF_Font* font;
SDL_Color color;

font = TTF_OpenFont("test.ttf", 15);

color.r = color.g = color.b = 255;

GApp->addFont(font, color);

Text *text = new Text(GApp->getFonts().at(0), " ");
text->setTexture( CTextM->textToGLTexture(GApp->getFonts().at(0), text) );
text->setPosX(20); text->setPosY(20);

GApp->addText(new Text(*text));

Text *textY = new Text(GApp->getFonts().at(0), " ");
textY->setTexture( CTextM->textToGLTexture(GApp->getFonts().at(0), textY) );
textY->setPosX(80); textY->setPosY(20);

GApp->addText(new Text(*textY));
delete textY; //-----> This line crashes the program with that error
}
.
.
.

GameApp.h

#ifndef GAMEAPP_H
#define GAMEAPP_H


class GameApp
{
public:
GameApp(){
}

//~GameApp();

void addFont(TTF_Font *font, SDL_Color color) {
vFonts.push_back(FontPtr( new Font(font, color) ) ); }

vector<FontPtr> getFonts() { return vFonts; }

void addText(Text *text) {
vTexts.push_back(new Text(*text));}

private:
SDL_Surface *gameMainSurface;
vector<Image*> vImages;
std::vector<FontPtr> vFonts;
vector<Text*> vTexts;
vector<Tile*> vTiles;
Map *currentMap;
};

#endif

所以我认为问题在于当我销毁对象 textY 时,指向 TTF_Font 的指针被销毁。但我不确定,因为当我在 vector 中添加对象 Text 时,我使用了复制构造函数,因此不同的指针可以毫无问题地复制。

最佳答案

只需使用 std::string。这个错误意味着你双重删除了一些东西,或者类似的东西,如果你不管理自己的内存,你就不会遇到这个问题。您的代码充满了内存泄漏和其他使用 std::string 不会出现的错误。

关于c++ - _Block_Type_Is_Valid (pHead->nBlockUse) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397545/

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