void func(int * arr){
arr = (int*)malloc(sizeof(int )*4);
for(int i = 0;i
arr[i] = i;
}
}
int main(){
int * arr;
func(arr);
printf("%d %d %d %d\n",arr[0],arr[1],arr[2],arr[3]);
free(arr);
return 0;
}
결과: 세그멘테이션 오류 (core dumped)
--------------------------------
void func(int arr[]){
for(int i = 0;i
arr[i] = i;
}
}
int main(){
int arr[4];
mal(arr);
printf("%d %d %d %d\n",arr[0],arr[1],arr[2],arr[3]);
return 0;
}
결과: 0 1 2 3
밑에 꺼는 배열을 void 함수에서 받아서 그 인자 값을 넣어주고 접근도 되는데
왜 위에 꺼는 오류뜨는거예요? malloc써서 메모리 할당하면 배열처럼
사용 가능한거 아니었슴? C린이 좀 도와주셈
자 편의상 일단 위의 func의 매개변수 arr을 brr이라고 하자. 함수가 호출된 시점에서 arr과 brr은 완전히 별개의 변수이며 동일한 값을 가지고 있어. 그리고 쓰레기값이기도 하지. 그런데 거기서 brr이 malloc의 반환값을 가짐으로서 arr은 여전히 쓰레기값을, brr은 힙의 어딘가를 가리키게 된거야.
그리고 함수가 끝났을 때 arr은 여전히 쓰레기값을 가지고 있는거지
해결: int** parr에 arr주소값을 담아 함수에 넘겨준다 - dc App