"내부 배열"을 다시 할당 할 필요가 없습니다. 할당하는 메모리의 내용은 포인터이며, input
을 재 할당하면 input
이 가리키는 내용이 아닌 input
포인터 만 재 할당됩니다. 그것이 어떻게 작동하는지
원유 ASCII 이미지
을 표시합니다 : 당신이 재 할당 후
+----------+ +---------------------------+
input -> | input[0] | -> | What `input[0]` points to |
+----------+ +---------------------------+
: 당신이 input
배열의 단일 항목을 할당 할 때 처음에는 다음과 같습니다
두 번째 입력 (즉, input = realloc(input, 2 * sizeof(char*));
)
+----------+ +---------------------------+
input -> | input[0] | -> | What `input[0]` points to |
+----------+ +---------------------------+
| input[1] | -> | What `input[1]` points to |
+----------+ +---------------------------+
내용 (예 : input[0]
)은 재 할당 전과 동일합니다. 변경되는 유일한 것은 실제 input
포인터입니다.
그래서 내가 "input = (char **) realloc (input, previousSize + 1)"과 같은 것을 할 수 있다는 것을 의미합니까? –
@NickStov 맞습니다. –
중요한 시스템을위한 @NickStov 당신은'realloc()'이 실패 할 경우 원래의'input' 포인터에 어떤 일이 일어나는지 생각해 볼 수 있습니다. 그러나 여기에 귀하의 구체적인 목적을 위해, 나는 당신에게 그다지 중요하지 않습니다. 또한'realloc()'은 초기 NULL 값을 넘겨 주면'malloc()'처럼 동작 할 것이므로'input' 값에'malloc()'이 필요하지 않으므로'input'이 NULL인지 확인하십시오 이 모든 일이 시작될 때. (그리고이 대답에 +1, 나는 ascii art = P를 아주 좋아한다). – WhozCraig