2015-12-13 1 views
-1

Я не знаю, что проблема в этом code-использованием перераспределить в с 1

void initialize(char ***A, int r, int c){ 
*A = (char **)realloc(A,sizeof(char *)*r); 
} 

это по призванию

char **A; 
initialize(&A, 10, 10); 
printf("%c",A[1][1]); 

Спасибо.

+0

Основные путаницы. Извините, я не могу написать обширный ответ на этом смартфоне. – chqrlie

+0

A сначала имеет значение null, и я хочу передать его функции. Если я делаю «malloc», он работает, но если я делаю malloc, это не так. – rotemhas

+0

OT: По крайней мере, 'int r' должен лучше (лучше) быть' size_t r'. – alk

ответ

4

А неинициализированная, попробуйте инициализировать его с NULL:

char **A = NULL; 
initialize(&A, 10, 10); 

realloc() будет вести себя как malloc() в этом случае и правильно realloc() в последующих вызовах будет. В противном случае неинициализированный указатель будет разыменован realloc().

Кроме того, realloc()*A:

realloc(*A, sizeof(char *) * r); 

В противном случае, вы бы попытаться перераспределить указатель на указатель вашего выделенного пространства А, который, конечно, потерпеть неудачу.

+0

... или просто сделать более надежным: '* A = realloc (* A, r * sizeof ** A);' – alk

+0

@rotemhas: Если это ответили на ваш вопрос, вы хотите принять этот ответ, щелкнув его галочкой , – alk