错误C4703可能是未初始化的本地指针变量' y'用过的

时间:2018-02-05 09:39:48

标签: c++ windows initialization

我收到的错误可能是未初始化的本地指针变量' y'用过的&潜在的未初始化的本地指针变量' z'使用,在下面提供的代码中。请帮我解决一下这个问题?

01.10.2017, News
02.02.2018, News
06.09.2017, News

3 个答案:

答案 0 :(得分:6)

将所有初始化移至开头。否则使用if (!x) goto clean;并跳转到cleanyz仍未初始化。

UINT8* x = NULL;
UINT32* y = NULL;
char* z = NULL;

x = new UINT8[512];
if (!x) goto clean;

y = new UINT32[4];
if (!y) goto clean;

z = new char[512];
if (!z) goto clean;

PS:正如其他人指出的那样,在现代C ++中,原始指针(以及newdelete)和goto通常不应该使用。您可能需要参考The Definitive C++ Book Guide and List

答案 1 :(得分:3)

供参考,这是21世纪的版本:

std::vector<std::uint8_t> x {512};
std::vector<std::uint32_t> y {4};
std::vector<char> z {512}; // Or std::string

请注意缺少clean:。这是故意的。编译器插入清理代码。

答案 2 :(得分:2)

如果你从这里跳转到goto

if (!x) goto clean;

然后yz从未在此处初始化:

if (x) delete[] x;
if (y) delete[] y;
if (z) delete[] z;

这个问题的真正答案是:不要使用goto,特别是在C ++中。请改用std::unique_ptr来自动管理内存。