gpt4 book ai didi

c - 单独函数中的 Malloc 变量导致 "uninitialized in this function"

转载 作者:太空宇宙 更新时间:2023-11-04 08:29:57 25 4
gpt4 key购买 nike

试图简化我的代码,我想我会很聪明,将一个函数中的所有变量分配到一个单独的函数中,以删除大代码块。然而,当我尝试 malloc 一些变量时,编译器返回:

warning: ‘roomString’ is used uninitialized in this function [-Wuninitialized]

这是缩短的代码:

int main(){
char ** roomString;
mallocBoard(roomString);
return 0;
}
void mallocBoard(char ** roomString)
{
roomString = malloc(sizeof(char *) *PARSEBUFF);
}

只是想知道为什么它会返回警告?有更好的方法吗?

最佳答案

这是因为 roomStringmain() 中未初始化。

当您将 roomString 指针传递给 mallocBoard 函数时,它不会覆盖存储在指针中的地址,而是覆盖存储在传递给的本地指针中的地址mallocBoard() 那是因为在 c 中你总是按值传递变量。

我的意思是 mallocBoard() 中作为参数接收的 roomString 是原始指针的副本,它只是包含与 中原始指针相同的地址code>main() 也指向,但是它自己的地址不同,所以修改它的值不会修改 main() 中指针的值。

你有两个选择

  1. 像这样将指针的地址传递给mallocBoard()

    void mallocBoard(char ***pointer, size_t size)
    {
    *pointer = malloc(sizeof(char *) * size);
    }

    然后从 main()

    mallocBoard(&roomString, someSize);

    这将修改原始指针的值。

  2. 像这样从 mallocBoard() 返回新的 malloc()ed 指针

    char **mallocBoard(size_t size)
    {
    return malloc(sizeof(char *) * size);
    }

    然后在 main()

    roomString = mallocBoard(someSize);

关于c - 单独函数中的 Malloc 变量导致 "uninitialized in this function",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28845808/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com