这个realloc使用有什么问题

use*_*361 0 c realloc

我正在尝试使用realloc从用户那里获得无限的输入.这是我到目前为止所做的:

int getCharactersFromUser(char* arr,char terminator)
{
char c = getch();
int length =0;
while(c!=terminator)
    {
    arr = realloc(arr, sizeof (arr)*(++length));
    arr[length-1]=c;
    c = getch();
    }
return length;
}
Run Code Online (Sandbox Code Playgroud)

我用这样的arr调用这个方法:char *unknownArr = calloc(0,sizeof *unknownArr); int length = getCharactersFromUser(&unknownArr,TEMINATOR_FOR_LIST);TEMINATOR_FOR_LISTeof

sim*_*onc 7

如果要更改调用者的副本arr,则需要将指针传递给指针.

另外,sizeof (arr)给你的大小char*; 你的代码似乎在假设sizeof(char).保证为1,可以简化存储器大小计算.

int getCharactersFromUser(char** arr,char terminator)
{
    *arr = NULL; // first call to realloc will crash if `*arr` is uninitialised in caller
    char c = getch();
    int length =0;
    while(c!=terminator)
    {
        *arr = realloc(*arr, ++length);
        (*arr)[length-1]=c;
        c = getch();
    }
    return length;
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎也是一种情况,在这种情况下,重新分配2的权力会更好,每次都加倍.(当然,这意味着在重新分配之间可以读取多个字符.) (2认同)