gpt4 book ai didi

C4700 : uninitialized local variable when combining path

转载 作者:行者123 更新时间:2023-11-30 15:31:06 25 4
gpt4 key购买 nike

运行此代码时:

TCHAR *getSettingsFilePath(TCHAR *defaultProfilePath)
{
TCHAR *prefPath;
PathCombine(prefPath, defaultProfilePath, "profile.xml");
return prefPath; // This returns valid path
}

编译器抛出警告:警告 C4700:使用了未初始化的局部变量 prefPath

PathCombine函数将 prefPath 设置为所需的路径。

但是当我在运行 PathCombine 之前尝试将 prefPath 初始化为 NULL 时,编译器警告消失了,但我的函数也返回 NULL .

TCHAR *getSettingsFilePath(TCHAR *defaultProfilePath)
{
TCHAR *prefPath = NULL;
PathCombine(prefPath, defaultProfilePath, "profile.xml");
return prefPath; // This will return NULL
}

我在这里想念什么?初始化此指针的正确方法是什么?

最佳答案

PathCombine 函数写入 prefPath 指向的空间。您的第一个版本似乎只能工作,因为碰巧, prefPath 指向的随机位置恰好是您有权访问的空间,并且没有其他任何东西依赖于此(无论如何,您都注意到了) )。

它不分配空间。事实上它不能。参数按值传递,因此函数无法对指针 prefPath 进行任何更改。请务必在心里区分两件事:指针被指向的东西

所以你需要分配一些空间。在 C++ 中,这对于函数来说是一个糟糕的设计,因为它需要调用者参与内存管理。从您的标签中并不清楚您是用 C 还是 C++ 编码(它们是不同的语言)。

暂时假设为 C,那么您需要 pick a dynamic allocation function ,并记录调用代码在使用完分配的内存后必须释放它。

可能更好的设计是让调用者传入正确大小的缓冲区(而不是返回指向动态分配的指针)。这让调用者可以选择是否需要自动分配或动态分配;以及使用哪个动态分配函数。

关于C4700 : uninitialized local variable when combining path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25116987/

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