[완료] 포인터에 일어나는 부식을 어떻게 없앨 수 있을까요?
글쓴이: yidj0205 / 작성시간: 목, 2022/03/17 - 2:32오전
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> static int good(char* string[]) { char array[20][100] = { NULL }; for (int i = 0; i < 20; i++) { array[i][0] = 'a'; array[i][1] = 'b'; array[i][2] = 'c'; array[i][3] = '\0'; string[i] = &array[i]; } return 0; } int main() { char* string[30] = { NULL }; good(string); for (int i = 0; i < 20; i++) { printf("%s\n", string[i]); } return 0; }
이중 배열을 string에 넣고 싶습니다. 하지만 string배열에 쓰레기 값이 쌓입니다.
구글링 해본 결과 배열포인터를 사용해야 되는데, 그래도 문제가 발생하네요.
어떻게 해야 해결할까요??
Forums:
문제의 원인은, good 함수에서 string 배열에
문제의 원인은, good 함수에서 string 배열에 지역 변수인 array의 주소를 채워서 돌려준다는 데 있습니다.
지역 변수의 메모리는 함수가 반환될 때 해제되므로 그 값이 그대로 있으리라는 보장이 없는 것이죠.
실제로 printf는 굉장히 복잡한 함수이기 때문에 스택 메모리를 상당히 사용하므로 array (였던 메모리)의 데이터는 100% 덮였을겁니다.
함수가 반횐되고도 여전히 살아남을 수 있는 메모리가 필요하면 malloc밖에 답이 없지요.
댓글 달기