[英]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));
}
在第一個圖片中,沒有泄漏,但是在下面的面板中,我們可以看到分配的詳細信息。
在第二張圖片中,沒有泄漏,但是在下面的面板中,我們可以看到沒有詳細信息。
這是為什么? 誰能解釋輸出內容(頂部和底部面板)?
謝謝!
更新:
你的意思是這樣嗎?
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
的方案從Release
為Debug
。 這樣做總是可以得到Release
優化代碼。
3)。 將Build Configuration
更改為Debug
。
現在,每當您分析代碼時,都將得到所有錯誤,因為未對代碼進行優化。
要分析您的發布代碼,請在Build Configuration
中將其更改回Release
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.