1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Why Segmentation Fault?

Discussion in 'C' started by coderzone, Jan 25, 2011.

  1. coderzone

    coderzone Super Moderator

    Why a segmentation fault?
    #include <iostream>
    #include <new>
    using namespace std;
    struct AB {
    	int A;
    	int B;
    int main(void) {
    	int llength;
    	AB *L;
    	L= new AB[llength];
    	delete [] L;
    	return 0;
    I think it should be out of memory.
  2. jimblumberg

    jimblumberg New Member

    The above code compiled and ran for me with no errors. Or segmentation faults.

    What compiler and operating system are you using? What is your maximum size of an int?

    I am using g++ on Linux.

  3. coderzone

    coderzone Super Moderator

    32 Bit WinXP and MS Visual Studio 2005
  4. jimblumberg

    jimblumberg New Member

    What does numeric_limits<int>::max() return?

    I get 2147483647.

    Note: You must #include <limits>

    shabbir likes this.
  5. xpi0t0s

    xpi0t0s Mentor

    That probably explains it. You're allocating 1111111111 pairs of 4-byte ints, that's 2,222,222,222 ints and of course 2,222,222,222*8 bytes (16.55GB), which is way over the maximum 3.2GB limit of 32-bit systems. If you want to write code like that, you're going to have to upgrade to 64-bit, or find some other way around it like using sparse arrays or a disk file.

    If C were "nice", yes, you should get an "out of memory" error. But C isn't nice; it assumes you know what you're doing and only falls over when it really has to.
    shabbir likes this.
  6. shabbir

    shabbir Administrator Staff Member

    Well Said.

Share This Page