簡體   English   中英

為什么VS2013抱怨“使用未初始化的內存”?

[英]Why is VS2013 complaining about “using uninitialized memory”?

我有一個代碼如下:

#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是否被初始化?

奇怪的是,如果結構中只有一個其他指針 - 例如,只有char *a - 警告不會觸發。 如果我在free(p->b)之前free(p->a) free(p->b) free(p->a) (交換行12和13),它也不會出現。

這似乎是visual studio 2013的分析工具的一個問題

如下所述:

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部分的更新,我們可以讀到:

更新:幸運的是VC ++ 2013解決了許多這些問題,但__analysis_assume的問題仍然存在。

因此,即使他們用最新的Visual Studio版本解決了許多這些警告問題,分析器工具中仍會出現一些錯誤。

使用VS2015 Enterprise進行測試:出現同樣的問題

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM