_Block_Type_Is_Valid (pHead->nBlockUse) Error
c++, debugging, pointers, sdl, visual-c++
Solution
Just use a `std::string`. That error means that you double deleted something, or something like that, a problem that you wouldn't have if you didn't manage your own memory. Your code is littered with memory leaks and other bugs that you won't have with `std::string`.
Problem
I been working in a new project but I encounter with a problem which I can't see why fail. When I perfom this line delete textY give me the error _Block_Type_Is_Valid (pHead->nBlockUse). So what am I doing wrong? This is the source code: 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; } ``` Font.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 ``` Font.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 ``` So I think the problem is that when I destroy the object textY, the pointer to the TTF_Font is destroyed. But I'm not sure because when I add a object Text in the vector I use a copy-constructor so the different pointers got copy without problems.