Утечки памяти в C (MacOS) - PullRequest
       47

Утечки памяти в C (MacOS)

0 голосов
/ 19 сентября 2019

Я студент по программированию на C, пытаюсь найти способ обнаружения утечек памяти в MacOs Mojave.

Я знаю о существовании Valgrind, но он не поддерживает текущие выпуски MacOs.После установки Apple Command Line Tools, я попытался запустить свою программу на C с помощью средства утечки, но она не работает ... Запуск этой очень простой программы на C:

#include <stdio.h>

int main(int argc, char const *argv[]) {
  printf("Hello World\n");
  return 0;
}

Примерно так:

leaks ./a.out

Это вывод:

leaks[875]: [fatal] unable to read input graph: The data 
 couldn’t be read because it isn’t in the correct format.

Я не понимаю, почему это происходит ... Как я могу использовать инструмент утечки?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2019

Попробуйте это

#define malloc(X) my_malloc( X, __FILE__, __LINE__, __FUNCTION__)

void* my_malloc(size_t size, const char *file, int line, const char *func)
{

    void *p = malloc(size);
    printf ("Allocated = %s, %i, %s, %p[%li]\n", file, line, func, p, size);

    /*Link List functionality goes in here*/

    return p;
}
0 голосов
/ 19 сентября 2019

Я не уверен, что это полезно, но если статус программы на C работает, «утечки» будут доступны

#include <stdio.h>

int main(int argc, char const *argv[]) {
  printf("Hello World\n");
  getchar(); // just add to sleep
  return 0;
}

выполнить выше, затем запустить ниже в другом терминале

leaks a.out

вы можете показать связанные сообщения

Process:         a.out [8724]
Path:            /Users/USER/Documents/*/a.out
Load Address:    0x1078f2000
Identifier:      a.out
Version:         ???
Code Type:       X86-64
Parent Process:  bash [7876]
...

с помощью [PID] также доступно в этом примере

leaks 8724

вот пример кода, утечка памяти которогообнаружено,

#include <stdio.h>

void test()
{
  char* pTmp = (char*)malloc(sizeof(char)*1);
}

int main(int argc, char const *argv[]) {
  printf("Hello World\n");
  test();
  getchar();
  return 0;
}
...