도와주세요!!
안녕하세요. 아래와 같은 코드에서 에러가 발생 합니다.
1번 코드와 2번 코드는 p1배열에 크기만 다름니다. p1[2] 와 p1[10] 의 차이 입니다.
그런데 배열의 크기를 10으로 했을시 segmentation fault 가 나는 이유를 모르겠습니다.
조언 부탁드립니다. 감사합니다.
환경
sama5d35ek 보드
arm-linux-gnueabi-gcc
kernel 3.10
-1번 코드-------------------------------------------------------
#include <stdio.h>
#include <malloc.h>
int main(int argc, const char * argv[]) {
char p1[2];
char* p;
p = (char*)malloc(1024*1024);
if (p == NULL) {
printf( "malloc() returned NULL\n");
return 1;
}
printf("pointer adderss heap space %p\n", p);
printf("pointer adderss stack space %p\n", p1);
return 0;
}
결과:
[root@ppp ~]# ./heapcheck
pointer adderss heap space 0x76d46008
pointer adderss stack space 0x7ec93a38
-2번 코드---------------------------------------------------------
#include <stdio.h>
#include <malloc.h>
int main(int argc, const char * argv[]) {
char p1[10];
char* p;
p = (char*)malloc(1024*1024);
if (p == NULL) {
printf( "malloc() returned NULL\n");
return 1;
}
printf("pointer adderss heap space %p\n", p);
printf("pointer adderss stack space %p\n", p1);
return 0;
}
결과 :
[root@ppp ~]# ./heapcheck
Segmentation fault
2번 코드에서
배열 선언시
char p1[10];
다음과 갘이 했던 내용을
int i =10;
char p1[i];
-----이후 상동 -----
위와 같이 선언하니 segmentation fault 가 안나느데요 이유가 궁금합니다.
급한 불은 해결했지만 왜 위와 같이 되는지 궁금합니다. 일이 손애 안잡히네요.
고수님들의 조언 부탁드립니다.
감사합니다.