gpt4 book ai didi

c++ - 为什么 Visual C++ 2010 提示 'Using uninitialized memory' ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:52 25 4
gpt4 key购买 nike

我有一个函数,它接受一个指向缓冲区的指针,以及该缓冲区的大小(通过指针)。如果缓冲区不够大,它会返回一个错误值并在输出参数中设置所需的长度:

// FillBuffer is defined in another compilation unit (OBJ file).
// Whole program optimization is off.
int FillBuffer(__int_bcount_opt(*pcb) char *buffer, size_t *pcb);

我这样调用它:

size_t cb = 12;
char *p = (char *)malloc(cb);
if (!p)
return ENOMEM;

int result;
for (;;)
{
result = FillBuffer(p, &cb);
if (result == ENOBUFS)
{
char *q = (char *)realloc(p, cb);
if (!q)
{
free(p);
return ENOMEM;
}

p = q;
}
else
break;
}

Visual C++ 2010(代码分析已达到最大程度)提示 'warning C6001: Using uninitialized memory 'p': Lines: ...'。它报告的行号几乎涵盖了整个函数。

Visual C++ 2008 没有。据我所知,这段代码没问题。我错过了什么?或者 VC2010 缺少什么?

最佳答案

这一定是 Visual Studio 2010 中的错误。包装 malloc 会删除警告,如以下测试代码所示:

char * mymalloc(int i)  
{
return (char *) malloc(i);
}

// ...

void *r = mymalloc(cb);

char *p;

p = (char *) malloc(cb);

关于c++ - 为什么 Visual C++ 2010 提示 'Using uninitialized memory' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055818/

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