Вызов malloc и сохранение возвращаемого значения в двойном указателе? - PullRequest
0 голосов
/ 10 апреля 2019
char **init(int n) {
    char **result;
    result = malloc(n * sizeof(char));
    return result;
}

Мне нужна помощь, чтобы понять, является ли 3-я строка ошибкой или нет.Вызов malloc () создаст N непрерывных блоков в памяти в куче, каждый из которых достаточно большой для хранения одного символа, и вернет void ptr (базовый адрес массива).Тем не менее, результатом является указатель на указатель, поэтому он должен хранить адрес другого указателя, который здесь не так?

1 Ответ

0 голосов
/ 10 апреля 2019

Может быть, вы хотите сделать что-то вроде этого:

char *init(unsigned int n) {
    char *result;

    /* allocate the memory */
    result = malloc(n * sizeof(char));

    return result;
}

это выделит память для хранения n смежных символов.

Вы можете уменьшить код до:

char *init(int n) {
    return malloc(n * sizeof(char));
}

или вместо вызова этой функции вы можете просто сделать это напрямую:

malloc(n * sizeof(char));

или вы можете создать макрос

#define INIT_CHAR_ARR(n) malloc((n) * sizeof(char))

если вы хотите n смежных указателей символов:

malloc(n * sizeof(char*))

Это поможет нам помочь вам, если вы объясните свою конечную цель, возможно, есть лучший способ сделать то, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...