Start New Discussion Reply to this Discussion Segmentation Fault
Hello,
Any ideas why this is giving a segmentation fault?:
#include <iostream>
#include <new>
using namespace std;
struct List {
int A;
int B;
List *next;
};
int main(void) {
int llength;
llength=1111111111;
List *L;
L= new List[llength];
L[37370197].B=-37370197;
delete [] L;
return 0;
}
Cheers
ricky_125
Newbie Poster
3 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
Skill Endorsements: 0
Yes.
More seriously, if you're running this program on a 32-bit machine, you're probably asking for much more memory than the system is capable of providing; and it would not be surprising to learn that an overflow is taking place as part of computing how much memory you need.
arkoenig
Master Poster
711 posts since Jun 2010
Reputation Points: 396
Solved Threads: 110
Skill Endorsements: 7
I thought it should crash out with a bad_alloc exception though?
ricky_125
Newbie Poster
3 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
Skill Endorsements: 0
In a perfect world, it would. In practice, it is not uncommon for implementations to fail to catch integer overflow.
arkoenig
Master Poster
711 posts since Jun 2010
Reputation Points: 396
Solved Threads: 110
Skill Endorsements: 7
So, am I right in saying that if the g++ compiler had the correct implementation, then the above would through a bad_alloc exception instead of a segmentation fault? (and if so, is this something which is likely to be fixed on future releases of the g++ compiler?)
Cheers
ricky_125
Newbie Poster
3 posts since Jan 2011
Reputation Points: 10
Solved Threads: 0
Skill Endorsements: 0
© 2013 DaniWeb® LLC
Page rendered in 0.0716 seconds
using 2.74MB