Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fixing Segmentation faults in C++

I am writing a cross-platform C++ program for Windows and Unix. On the Window side, the code will compile and execute no problem. On the Unix side, it will compile however when I try to run it, I get a segmentation fault. My initial hunch is that there is a problem with pointers.

What are good methodologies to find and fix segmentation fault errors?

like image 315
Elpezmuerto Avatar asked Sep 15 '10 15:09

Elpezmuerto


People also ask

What is the solution for segmentation fault in C?

It can be resolved by having a base condition to return from the recursive function. A pointer must point to valid memory before accessing it.

How can segmentation fault be reduced?

Use a #define or the sizeof operator at all places where the array length is used. Improper handling of NULL terminated strings. Forgetting to allocate space for the terminating NULL character. Forgetting to set the terminating NULL character.

Why do I keep getting segmentation fault in C?

In practice, segfaults are almost always due to trying to read or write a non-existent array element, not properly defining a pointer before using it, or (in C programs) accidentally using a variable's value as an address (see the scanf example below).


2 Answers

  1. Compile your application with -g, then you'll have debug symbols in the binary file.

  2. Use gdb to open the gdb console.

  3. Use file and pass it your application's binary file in the console.

  4. Use run and pass in any arguments your application needs to start.

  5. Do something to cause a Segmentation Fault.

  6. Type bt in the gdb console to get a stack trace of the Segmentation Fault.

like image 50
Svisstack Avatar answered Oct 13 '22 06:10

Svisstack


Sometimes the crash itself isn't the real cause of the problem-- perhaps the memory got smashed at an earlier point but it took a while for the corruption to show itself. Check out valgrind, which has lots of checks for pointer problems (including array bounds checking). It'll tell you where the problem starts, not just the line where the crash occurs.

like image 39
paleozogt Avatar answered Oct 13 '22 04:10

paleozogt