• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
Sign in to follow this  
Followers 0
chiranjivi

Segfault upon exiting application

6 posts in this topic

I'm working on a project at the moment in CodeBlocks using SDL2. At some point during development (I'm not exactly sure when tongue.png) the application began to segfault upon closing down.

 

If I set a breakpoint somewhere and step through the code line-by-line, the crash doesn't happen until after the app successfully executes return 0; at the end of int main, so I don't know where I should be looking for the error.

 

When the segfault occurs, the console output usually reads "Process returned 255 (0xFF)", although I infrequently get "Process returned -1073741819 (0xC0000005)" instead, seemingly at random. 0xC0000005 as far as I can tell means it is accessing memory it shouldn't?

 

Here's a screenshot of the call stack:

 

wRSVm8h.png

 

I would post some code, but I have no idea what code might actually be relevant and the project is very large. I would welcome any insight here as I have no idea what is going on! Thanks in advance for any replies.

 

edited to add: apologies if this question would be better suited for a different subforum, I didn't really know where to put it

Edited by chiranjivi
0

Share this post


Link to post
Share on other sites

C++? Check your destructors of global objects, they run after main returns.

 

Ah, yeah that seems like it would be it. I recently made an abstract class from which the player and the enemies derive so that they can share common functions, and the player object is global for the sake of convenience. What issue with the destructors is this causing? (Despite now knowing where the problem lies I'm still not sure how I can fix it).

 

Thanks for your help.

0

Share this post


Link to post
Share on other sites

I was going to suggest the same thing as the posters above, but I might add a question if you are doing any kind of multi tasking or something?  Freeing resources for a task that hasn't stopped processing or something?

0

Share this post


Link to post
Share on other sites
I dont know if it helps but one of the students I have been taking lab sessions for at the Uni was attempting to use SDL_FreeSurface() on the SDL_Surface* returned from SDL_SetVideoMode(). This was the reason for a crash during exit.

This was incorrect and this SDL_Surface* is cleaned up when SDL_Quit() is called instead.

So perhaps you have put this SDL_FreeSurface as a deleter in a unique_ptr / shared_ptr and is causing a double delete issue when exiting. Edited by Karsten_
0

Share this post


Link to post
Share on other sites

What issue with the destructors is this causing? (Despite now knowing where the problem lies I'm still not sure how I can fix it)

The same way you find and fix invalid pointers elsewhere.

Usually the easiest is to catch it in a debugger or to generate a crash dump and review it.

With it open in the debugger, look at the call stack at the time of the crash. Something told the program to look at that location. Since it is after main() returned, it is possibly a destructor or some code called by a destructor or possibly code registered to be run by atexit() or some other method.

Often in the debugger you can discover the exact line number of the function that dereferenced the memory, other times you just get the function names. Occasionally you will just get a memory region that requires looking it up in the executable's map file. Rarely you will have corrupted your stack or other memory to the point where you cannot identify the location, and then you have a nightmare debugging scenario far beyond the scope of a forum post. If know the exact instruction within a line, identifying the pointer is done for you, it is the pointer listed in the instruction. If you know the line, look for all the potential pointers that could be followed. If it is a full function, look for all the potential pointers in the function as well as any calls that are made within the function.

Usually the process is very quick. Most often it is just an object that has been destroyed but either wasn't zeroed out after destruction, or a dangling reference to something. Occasionally it is a different problem, like an overwritten memory buffer.

Anyway, once you find it, eliminate it. If the pointer was previously zeroed out, just add a null check and verify the solution. If the pointer wasn't zeroed out, search the code for all the places that can potentially release that piece of memory and make sure they zero it out after release, and still add the null check; then verify the solution.

EDIT: Since you helpfully provided some info from your call stack, the isspace() and the open() suggest it is something dealing with a file stream cleanup. Pick those functions in the debugger, see what they are and what they contain. The open() function looks like it is very near your main function, so it should provide a convenient place to backtrack from.
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0