Утечка памяти Xcode 7.2 & Instruments не работает для кода C++
Я использую следующий код:
int main()
{
int* foo = new int[10];
foo = nullptr;
sleep(60);
}
Я строю его внутри XCode 7.2 и запускаю инструменты, чтобы увидеть утечку памяти. Я изменил время задержки по-другому и изменил задержку проверки приборов (от 10 до 2 секунд). Я пытался построить проект по-другому (Release, Debug), а также пытался избежать оптимизации компилятора:
int* foo = new int[10];
for (int i = 0; i < 10; ++i)
{
foo[i] = i*3 + i^2;
}
for (int i = 0; i < 10; ++i)
{
cout << foo[i] << endl;;
}
foo = nullptr;
sleep(60);
но я все еще не вижу утечек внутри приборов / утечек. Что я делаю не так?
Upd: я нашел обходной путь, если я остановил консольное приложение в точке останова, а затем из консоли запустил
MacBook-Pro-andrey-2:~ owl$ leaks Ctrain
Process: Ctrain [30305]
Path: /Users/owl/Library/Developer/Xcode/DerivedData/Ctrain-cuhszmbcsswlznetmyijwykgudlz/Build/Products/Debug/Ctrain
Load Address: 0x100000000
Identifier: Ctrain
Version: ???
Code Type: X86-64
Parent Process: debugserver [30306]
Date/Time: 2015-12-23 21:30:28.768 +0300
Launch Time: 2015-12-23 21:30:25.837 +0300
OS Version: Mac OS X 10.10.5 (14F27)
Report Version: 7
Analysis Tool: /Applications/Xcode.app/Contents/Developer/usr/bin/leaks
Analysis Tool Version: Xcode 7.2 (7C68)
----
leaks Report Version: 2.0
Process 30305: 390 nodes malloced for 34 KB
Process 30305: 1 leak for 48 total leaked bytes.
Leak: 0x1001054f0 size=48 zone: DefaultMallocZone_0x10006e000
0x00000002 0x00000006 0x0000000a 0x0000000e ................
0x00000012 0x00000016 0x0000001a 0x0000001e ................
0x00000022 0x00000026 0x93554c2c 0x00007fff "...&...,LU.....
но это всего лишь обходной путь, а не ответ, почему приборы не могут уловить эту утечку (или любую утечку в моем случае).
1 ответ
Да, это утечка памяти, так как вы никогда не сможете удалить память, но вы не сможете наблюдать ее, если не повторить операцию. Если у тебя есть
int main()
{
int* foo;
for (i = 0; i < 10; i++)
{
foo = new int[10];
sleep(60);
}
}
Вы сможете наблюдать за тем, как увеличивается потребление памяти процессом, поскольку мы никогда не освобождаем память, которую мы запрашиваем, прежде чем захватить больше памяти.