2011-08-16 2 views
3

나는 다음 구조체를realloc을 구조체, C

struct Board 
{ 
    int width; 
    int height; 
    char **board; 
} 

을 그리고 난, 따라서 더 많은 메모리와 realloc을 호출()를 필요 의미하는 ** 보드를 확장하고 싶습니다. 그래서 내 질문에 어떻게해야합니까 - 내가 realloc() 배열의 separatly 및 모든 구조체에서 호출하는 모든 줄에 호출해야합니까? 감사합니다. 더 라인을 원하는 경우에

답변

0

malloc이 아닌 reallocboard입니다. Board의 개체를 인스턴스화하면 board 멤버에게 메모리가 할당되지 않습니다. 따라서 메모리를 재 할당하는 문제는 아니지만 메모리를 multidimensional arrays에 대한 일반적인 방법으로 board에 할당하면 이됩니다.

#include <stdlib.h> 

int **array; 
array = malloc(nrows * sizeof(int *)); 
if(array == NULL) 
    { 
    fprintf(stderr, "out of memory\n"); 
    exit or return 
    } 
for(i = 0; i < nrows; i++) 
    { 
    array[i] = malloc(ncolumns * sizeof(int)); 
    if(array[i] == NULL) 
     { 
     fprintf(stderr, "out of memory\n"); 
     exit or return 
     } 
    } 

되면, 당신은 메모리를 할당 한 다음 당신이 board을 확장해야하는 경우 (예를 들어 board는 처음에 2 × 2이었고, 지금 당신은 좁은되고 싶어요), 당신은 초기화 malloc라는 같은 순서로 realloc 전화 board. board위한

0

, 당신은 당신이 라인을 확장하려는 경우, 당신은 당신이 이전에 할당 된 각 라인에 realloc를 호출 할 필요가 boardrealloc를 호출해야합니다 (예 : board[0], board[1] 등)

0

당신은 예측할 수있는 경우 얼마나 많은 메모리가 필요한지, 한 번만 호출하는 것이 가장 좋습니다. 그렇지 않으면 전체적인 고통이 엄청나게 느려질 수 있습니다.

1

통화 realloc 새로운 행을 추가 (가정 높이는 제 치수) (1)에 의해 소자의 수를 증가하고 board[height]malloc를 호출