jackhab
jackhab

Reputation: 17698

Segmentation fault on valid memory

I get segmentation fault accessing an object which looks valid and fully accessible in gdb. Isn't segmentation is always about inaccessible memory?

EDIT: more details.

The crash happend under gdb so I could examine the object's memory. It had the members set to proper values so there is no chance I was accessing read-only memory. The instruction where crashed happed is kind of Var = Obj.GetMember() where Var, GetMember and the corresponding member are short integers. Misalignment? I suppose it would cause bus error, not segmentation. I'll try to rebuild all. The problem is that this piece of code runs thousands times a second and the segmentation happens once in several days.

Upvotes: 0

Views: 1379

Answers (4)

user500944
user500944

Reputation:

Try complete rebuild (make clean && make), this had helped me a couple of times when I encountered such weird errors.

Late UPD:

If this does fix the problem, it usually means that something is wrong with your makefile, usually screwed-up dependencies between .cpp and .h files, for example: a.cpp includes b.h, but b.h is not listed in a.cpp's dependencies.

Upvotes: 1

FrankH.
FrankH.

Reputation: 18217

You can get faults even if accessing "valid" memory under some circumstances:

  • you're attempting to modify memory but the specific mapping is readonly
  • you're attempting to execute code in a memory area that is no-execute
  • you're attempting to e.g. load/store at a misaligned address and your hardware issues alignment exceptions

Without a look at the coredump, to figure out what the faulting instruction (load/store/execute) was and what exactly the mapping permissions for the accessed memory were it's impossible to distinguish.

Upvotes: 2

northerncodemonkey
northerncodemonkey

Reputation: 191

Code would very much help, but have you done a make clean? If you've increased the size of a class and your dependencies aren't right then there won't be enough space allocated for an instance and that class will then overrun and corrupt whatever it precedes in memory.

Upvotes: 0

prolink007
prolink007

Reputation: 34544

Basically, yes. Did you use the core dump to analyze your seg fault?

Upvotes: 0

Related Questions