'malloc' and 'Segmentation fault'
'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?"