Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No out of bounds error

Tags:

I have this code in C which takes in bunch of chars

#include<stdio.h>  # define NEWLINE '\n' int main() {  char c; char str[6]; int i = 0; while( ((c = getchar()) != NEWLINE)) {         str[i] = c;         ++i;         printf("%d\n", i); }  return 0; } 

Input is: testtesttest

Output: 1 2 3 4 5 6 7 8 117 118 119 120

My questions are:

  1. Why don't I get an out of bounds (segmentation fault) exception although I clearly exceed the capacity of the array?

  2. Why do the numbers in the output suddenly jump to very big numbers?

I tried this in C++ and got the same behavior. Could anyone please explain what is the reason for this?

like image 909
Cemre Mengü Avatar asked Feb 04 '12 00:02

Cemre Mengü


People also ask

What is out of bounds error?

The array index out of bounds error is a special case of the buffer overflow error. It occurs when the index used to address array items exceeds the allowed value. It's the area outside the array bounds which is being addressed, that's why this situation is considered a case of undefined behavior.

What is out of bounds error in Java?

The StringIndexOutOfBoundsException is an unchecked exception in Java that occurs when an attempt is made to access the character of a string at an index which is either negative or greater than the length of the string.

Is index out of bounds a runtime error?

The ArrayIndexOutOfBoundsException is a runtime exception in Java that occurs when an array is accessed with an illegal index. The index is either negative or greater than or equal to the size of the array.

Does C++ check out of bounds?

Note that C and C++ do not do bounds checking on arrays, so stuff like that isn't going to be caught at compile or run time. No, Undefined behavior "works in your favor" when it crashes cleanly.


1 Answers

  1. C doesn't check array boundaries. A segmentation fault will only occur if you try to dereference a pointer to memory that your program doesn't have permission to access. Simply going past the end of an array is unlikely to cause that behaviour. Undefined behaviour is just that - undefined. It may appear to work just fine, but you shouldn't be relying on its safety.
  2. Your program causes undefined behaviour by accessing memory past the end of the array. In this case, it looks like one of your str[i] = c writes overwrites the value in i.
  3. C++ has the same rules as C does in this case.
like image 152
Carl Norum Avatar answered Sep 24 '22 07:09

Carl Norum