Realloc () сбрасывает квалификаторы - PullRequest
1 голос
/ 28 мая 2019

Я просто пишу код, который должен перераспределить массив X указателей на константы A, B, C (см. Схему ниже):

 _______ _______ _______     ________     ________________ 
|char* A|char* B|char* C|...|char** X|...|char*** pref_arr|...
 """"""" """"""" """""""     """"""""     """""""""""""""" 
     __                             __
    |\______________________/      |\__________/

У меня есть массив A, B, C , указатель на этот массив X и указатель pref_arr , который указывает на X . У меня не было места в схеме, но все символы определены как const.

У меня тогда есть следующий код

function(const char*** pref_arr, int new_length) {
    const char** new_pref_arr = realloc(**pref_arr, sizeof(const char*) * new_length);
    // some other stuff to do...
}

где я пытаюсь перераспределить массив X на длину new_length . Проблема в том, что моя IDE предупреждает меня, что передача const char* в void* отменяет квалификаторы.

1 Ответ

1 голос
/ 28 мая 2019

проблема здесь в том, что вы слишком разыменовываетесь, одна звездочка - это именно то, что вы хотите, а не две. Смотрите ниже:

function(const char*** pref_arr) {
    const char** new_pref_arr = realloc(*pref_arr, sizeof(const char*) * N);
    // some other stuff to do...
}

Что вы делали в своем коде, так это то, что вы пытались перераспределить строку A (потому что **pref_arr указывает именно туда - с помощью двойной разыменования), что, вероятно, не то, что вы хотели.

...