簡體   English   中英

在Xcode 9儀器中無法檢測到C泄漏

[英]Can't detect C leaks in xcode 9 instruments

我正在嘗試第一次使用樂器。 因此,我編寫了一個小型C程序來檢測儀器中的內存泄漏。

碼:

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

int main()
{
    int *temp = NULL;
    temp = (int*)malloc(100*sizeof(int));
    for (int i = 0; i<100; ++i) {
        temp[i] = i;
    }
    printf("%d", *(temp+1));
    printf("Hello   ");
    temp = NULL;
    usleep(10000000);
    printf("%d", *(temp+1));
}

在此處輸入圖片說明


當我使用free(temp) 在此處輸入圖片說明


在第一個圖片中,沒有泄漏,但是在下面的面板中,我們可以看到分配的詳細信息。

在第二張圖片中,沒有泄漏,但是在下面的面板中,我們可以看到沒有詳細信息。

這是為什么? 誰能解釋輸出內容(頂部和底部面板)?

謝謝!


更新:

你的意思是這樣嗎?

int main()
{
    char **temp = NULL;
    temp = (char**)malloc(100*sizeof(char*));
    for (int i = 0; i<100; ++i) {
        temp[i] = (char *)malloc(100*sizeof(char));
        temp[i]=NULL;
        usleep(2000000);
    }
}

在此處輸入圖片說明

PS我標記了C ++,因為我認為上面的代碼也可以用C ++編寫。 如果我寫錯了,請刪除標簽。

您的代碼沒有問題。 如預期的那樣,它將導致內存泄漏。 問題(實際上是好的)是Xcode。

Xcode優化您的代碼以消除所有內存泄漏。 這就是為什么儀器沒有顯示任何內存泄漏的原因。

若要查看您的內存泄漏,請禁用Xcode中的優化。

在此處輸入圖片說明

選擇None [-O0]以禁用所有優化。


您可以使用儀器來分析最終的生產代碼。 因此,請勿更改Release設置。 您可能會忘記將其改回,並且不會優化您的程序。

而是將Profile的方案從ReleaseDebug 這樣做總是可以得到Release優化代碼。

1)。 點擊可執行圖標 在此處輸入圖片說明

2)。 單擊Edit Scheme 在此處輸入圖片說明

3)。 Build Configuration更改為Debug 在此處輸入圖片說明

現在,每當您分析代碼時,都將得到所有錯誤,因為未對代碼進行優化。

要分析您的發布代碼,請在Build Configuration中將其更改回Release

暫無
暫無

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

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