Realloc() 丢弃限定符

Realloc() discards qualifiers

我正在编写一个代码,该代码必须重新分配指向常量字符串 A、B、C 的指针数组 X(请参阅方案如下):

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

我有 A,B,C 的数组,指向该数组 X 的指针和一个 pref_arr 的指针指向 X。 我在方案中没有 space,但所有字符都符合 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* 会丢弃限定符。

这里的问题是,您取消引用太多,一个星号正是您想要的,而不是两个。见下文:

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 恰好指向那里 - 通过双重取消引用),这可能不是您想要的。