我收到的错误可能是未初始化的本地指针变量' y'用过的&潜在的未初始化的本地指针变量' z'使用,在下面提供的代码中。请帮我解决一下这个问题?
01.10.2017, News
02.02.2018, News
06.09.2017, News
答案 0 :(得分:6)
将所有初始化移至开头。否则使用if (!x) goto clean;
并跳转到clean
,y
和z
仍未初始化。
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 ++中,原始指针(以及new
和delete
)和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;
然后y
和z
从未在此处初始化:
if (x) delete[] x;
if (y) delete[] y;
if (z) delete[] z;
这个问题的真正答案是:不要使用goto
,特别是在C ++中。请改用std::unique_ptr
来自动管理内存。