C Bus Error
Contents |
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us Learn more about Stack Overflow the company Business c bus error 10 Learn more about hiring developers or posting ads with us Stack Overflow Questions Jobs Documentation
Fgets
Tags Users Badges Ask Question x Dismiss Join the Stack Overflow Community Stack Overflow is a community of 4.7 million programmers, just c bus error core dumped like you, helping each other. Join them; it only takes a minute: Sign up What is a bus error? up vote 155 down vote favorite 49 What does the "bus error" message mean, and how does it differ
Linux Bus Error
from a segfault? c unix segmentation-fault bus-error share|improve this question edited Oct 18 '15 at 10:44 Cool Guy 15.8k51952 asked Oct 17 '08 at 14:48 raldi 7,239216178 add a comment| 15 Answers 15 active oldest votes up vote 150 down vote accepted Bus errors are rare nowadays on x86 and occur when your processor cannot even attempt the memory access requested, typically: using a processor instruction with an address that does not satisfy its alignment arrays bus error requirements. Segmentation faults occur when accessing memory which does not belong to your process, they are very common and are typically the result of: using a pointer to something that was deallocated. using an uninitialized hence bogus pointer. using a null pointer. overflowing a buffer. PS: To be more precise this is not manipulating the pointer itself that will cause issues, it's accessing the memory it points to (dereferencing). share|improve this answer edited Oct 17 '08 at 15:18 answered Oct 17 '08 at 15:12 bltxd 5,70322336 52 They aren't rare; I'm just at Exercise 9 from How to Learn C the Hard Way and already encountered one... –11684 Mar 26 '13 at 20:12 5 Another cause of bus errors (on Linux anyway) is when the operating system can't back a virtual page with physical memory (e.g. low-memory conditions or out of huge pages when using huge page memory.) Typically mmap (and malloc) just reserve the virtual address space, and the kernel assigns the physical memory on demand (so called soft page faults.) Make a large enough malloc, and then write to enough of it and you'll get a bus error. –Eloff Jul 14 '15 at 0:09 add a comment| up vote 55 down vote A segfault is accessing memory that you're not allowed to access. It's read-only, you don't have permission
here for a quick overview of the site Help Center Detailed answers to any questions you might have Meta Discuss the workings and policies of this site About Us
Bus Error In C Program
Learn more about Stack Overflow the company Business Learn more about hiring developers
C Malloc
or posting ads with us Stack Overflow Questions Jobs Documentation Tags Users Badges Ask Question x Dismiss Join the Stack Overflow c segmentation fault Community Stack Overflow is a community of 4.7 million programmers, just like you, helping each other. Join them; it only takes a minute: Sign up Bus error vs Segmentation fault up vote 25 http://stackoverflow.com/questions/212466/what-is-a-bus-error down vote favorite 8 Difference between a bus error and a segmentation fault? Can it happen that a program gives a seg fault and stops for the first time and for the second time it may give a bus error and exit ? c share|improve this question edited May 2 '12 at 12:04 casperOne 58k10126202 asked May 8 '09 at 6:56 Thunderboltz 6253915 add a comment| 6 http://stackoverflow.com/questions/838540/bus-error-vs-segmentation-fault Answers 6 active oldest votes up vote 34 down vote accepted On most architectures I've used, the distinction is that: a SEGV is caused when you access memory you're not meant to (e.g., outside of your address space). a SIGBUS is caused due to alignment issues with the CPU (e.g., trying to read a long from an address which isn't a multiple of 4). share|improve this answer answered May 8 '09 at 7:06 paxdiablo 488k1179691416 10 Memory mapped files can also generate SIGBUS. –bk1e May 8 '09 at 16:06 on arm SIGBUS can occur if you read a float from an address that is not 4 byte aligned –shoosh Mar 30 at 7:29 shoosh, I'm pretty certain that's covered by my second bullet point. –paxdiablo Mar 30 at 13:28 add a comment| up vote 11 down vote SIGBUS will also be raised if you mmap() a file and attempt to access part of the mapped buffer that extends past the end of the file, as well as for error conditions such as out of space. If you register a signal handler using sigaction() and you set SA_SIGINFO, it may be possible to have your progra
program yourself, you can skip the rest of this section. For College-supported software, you can report the bug by contacting a consultant through olc or "mail staff". ------------------------------------------------------------------------------- If the program displays this message: Bus error or Segmentation fault or Core dump ... then the program was trying to access a memory location outside its address space. The computer detected this problem and sent a signal to your program, which caused it to abort. Things that cause bus errors and segmentation violations are typically out-of-bounds array references and/or references through uninitialized or mangled pointers. Look very closely in your program for bizarre things like that. A common example in C is: int c; scanf("%d", c); instead of the correct version: int c; scanf("%d", &c); An example from C++ is: int* p=new int[100]; cout<< p[100]; instead of the correct version: int* p=new int[100]; cout << p[99] (remember array referances in C and C++ start with 0 ) There are a number of methods for finding out where the program went out of bounds. One method is to use printf() statements to determine how far the program is getting before it crashes, and to print out the contents of interesting variables. A more sophisticated method is using 'dbx', a source level symbolic debugger. C and C++ programmers can also use 'gdb'. To learn about 'dbx', you can read the manual pages by using the 'man' command, as in: man dbx To learn about 'gdb', you can read the manual node in the 'xinfo' program, or using 'M-x info' in Emacs. If you need to debug your program, you may want to enable a core dump. Usually, those two messages above would also have "(core dumped)" by them, indicating that the program wrote an image of its current memory into a file called "core" in that directory. You might want to type 'fs lq' and find out how many blocks (kilobytes) you have available in your quota. Then you can type, say: limit coredumpsize 100 .. to limit your core dump size to 100K for your current login. BE CAREFUL not to let yourself go over quota, as you would then not be able to create or edit files. You should delete the "core" file when you don't need it any more. To allow core dumps and still not have quota worries, you can make a symbolic link from the name core into the /tmp directory. Core dumps created this way will not take up quota, and they will automatically vanish when the machine is rebooted. The disk backup will also occur more quickly since it doesn't have to go over the network to your directory. To set up a core link in a directory: ln -s /tmp/core.project ./core unlimit coredump