나는 여기 Shawn Chin이 게시 한 방법을 사용하여 인접한 2 차원 배열을 생성 중입니다. [1] [2] 그것은 아주 잘 작동합니다. 자신의 게시물에서인접한 2D 배열의 재 할당
간단히 :
char** allocate2Dchar(int count_x, int count_y) {
int i;
# allocate space for actual data
char *data = malloc(sizeof(char) * count_x * count_y);
# create array or pointers to first elem in each 2D row
char **ptr_array = malloc(sizeof(char*) * count_x);
for (i = 0; i < count_x; i++) {
ptr_array[i] = data + (i*count_y);
}
return ptr_array;
}
그리고 다음과 같은 무료 기능 : 만 생각하지만
void free2Dchar(char** ptr_array) {
if (!ptr_array) return;
if (ptr_array[0]) free(ptr_array[0]);
free(ptr_array);
}
어느 차원에서 이에 상응하는 재 할당 함수를 작성하는 방법을 나에게 명확하지 않다 연속성을 유지하면서 행 수를 다시 할당하는 데 관심이 있습니다. 열의 수를 늘리는 것은 이해하기 쉽지만 아마도 매우 어려울 것입니다. 나는이 문제에 대한 직접적인 토론을 어디에도 발견하지 못했다. "어렵다!"[2]
물론 이것은 끔찍한 brute force 방법으로 데이터를 새로운 1D 배열 (위의 데이터)에 저장하여 저장하고 1D 배열을 다시 할당 한 다음 포인터 (ptr_array)를 free하고 다시 생성하여 새로운 크기의 행 요소 그러나 데이터를 복사하는 데 필요한 메모리 요구량을 최소한 두 배로 늘려야하기 때문에 행 수정에 다소 시간이 많이 걸립니다. 이는 열 수를 변경하는 경우 정말 끔찍한 일입니다.
이것은 행 수를 변경하는 방법의 예입니다 (데이터의 포인터에 대한 오프셋이 잘못되어 열 수를 변경하면 제대로 작동하지 않습니다). 나는 이것을 완전히 테스트하지는 않았지만, 아이디어를 얻었습니다 ...
플러스,이 방법은 불쾌한 이전 크기를 알아야합니다!
모든 의견을 크게 높이 셨습니다.
[1] How can I allocate a 2D array using double pointers?
[2]를 ptr_array[0]
에서 원래의 데이터 배열에 쉽게 액세스 할 수 있기 때문에 http://www.eng.cam.ac.uk/help/tpl/languages/C/teaching_C/node52.html
감사합니다. 이것은 정확하고 잘 작동합니다. – coastal