gpt4 book ai didi

c - 为什么 VS2013 提示 "using uninitialized memory"?

转载 作者:太空狗 更新时间:2023-10-29 17:12:49 28 4
gpt4 key购买 nike

我有一段代码是这样的:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
char *a;
char *b;
int c;
} my_type;

void free_my_type(my_type *p) {
if (p) {
if (p->a) free(p->a); // line 12
if (p->b) free(p->b); // line 13
free(p);
}
}

int main(void) {
my_type *p = malloc(sizeof(*p));

p->a = malloc(10);
p->b = malloc(10);
p->c = 10;

free_my_type(p);

return 0;
}

VS 的代码分析提示我是:

"C6001 Using uninitialized memory '*p'"

'*p' is not initialized 12
Skip this branch, (assume 'p->b' is false) 13
'*p' is used, but may not have been initialized 13

我的意思是,它是一个指针,我正在检查它是否为 NULL。我怎么知道 *p 是否已初始化?

奇怪的是,如果结构中只有 1 个其他指针——例如只有 char *a——则不会触发警告。如果我在 free(p->a) 之前执行 free(p->b) (交换第 12 和 13 行),它也不会显示。

最佳答案

好像是visual studio 2013的analyzer工具的问题

如此处解释:

https://randomascii.wordpress.com/2011/07/25/analyze-for-visual-studiothe-ugly-part-1/

https://randomascii.wordpress.com/2011/07/29/analyze-for-visual-studiothe-ugly-part-2/

https://randomascii.wordpress.com/2011/08/06/analyze-for-visual-studiothe-ugly-part-3-false-positives/

https://randomascii.wordpress.com/2011/08/20/analyze-for-visual-studiothe-ugly-part-4-false-negatives/

https://randomascii.wordpress.com/2011/09/13/analyze-for-visual-studio-the-ugly-part-5/

作为第 5 部分的更新,我们可以读到:

Update: Luckily VC++ 2013 has solved many of these issues, but the problems with __analysis_assume remain.

因此,即使他们用最新的 visual studio 版本解决了许多这些警告问题,分析器工具中仍然会出现一些错误。

用VS2015 Enterprise测试:同样的问题

enter image description here

关于c - 为什么 VS2013 提示 "using uninitialized memory"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33513003/

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