'Segmentation fault' is very familiar error for C developer.
Then, when this runtime error is issued?
At the moment of accessing not-allocated-memory?
This may be right, but this is NOT strict enough.
'Segmentation fault' is issued by kernel through signal to notify that,
"You - user process - try to access not-permitted memory area. And usually, this happens when it tries to access not-allocated-memory - for the user process (In case of ARM architecture, it is triggered by Data Abort cpu exception).
Let's see below code.
#include <stdio.h> #include <stdlib.h> int main(int argc, const char *argv[]) { int i = 0; char *s = malloc(1); s += 1; for (i = 0; i < 1024 * 1024 * 1024; i++) { printf("%d\n", i); s[i] = 4; } return 0; }
Do you think when this process is stopped by 'Segmentation fault' signal?
"i == 0" ? (that is at the first moment of trying to access not-allocated-memory-by-malloc).
It, is totally up to malloc implementation.
But, at above case, this is definitely NO.
The reason is, kernel(linux) allocate memory for user process at least 1-page.
So, above code will run even if i > 1024 especially on the Linux machine.
And, there are various implementation(algorithm) of malloc.
So, we cannot expect exact value of i for above code.
Important thing to know here is, answer the question - "What exactly does 'Segmentation fault' mean?"
'Language > C&C++' 카테고리의 다른 글
[C/C++] sizeof array (0) | 2015.03.19 |
---|---|
[Macro] '##' macro operator (0) | 2015.02.11 |
[GCC] Initialize array... (0) | 2014.07.25 |
[Linux] Using named pipe in linux (주의할 점) (0) | 2014.01.09 |
[c/c++] file copy using 'sendfile' on linux. (0) | 2013.12.17 |