2010-12-28 2 views
1

Когда я использую этотПочему у моей программы есть ошибки с проверкой утечки памяти?

valgrind --leak-check=yes ./Main 

У меня есть около 185236 ошибок. Он сказал, что:

хх байт х блоков, возможно, потеряли в рекордные потери хххх хххх из

Вот мой код:

Node InsertString(Head head, Node tree, char* data) { 
    if (tree == NULL) { 
     tree = malloc(sizeof (struct TreeNode)); //Error 

     if (tree == NULL) { 
      printf("Out of Space!\n"); 
     } else { 
      tree->theData = malloc(sizeof (char) * strlen(data));//Error 
      strcpy(tree->theData, data); 
     } 
    } else { 
      if (strcmp(data, tree->theData) < 0) { 
       tree->Left = InsertString(head, tree->Left, data); //Error 
      } else { 
       if (strcmp(data, tree->theData) > 0) { 
        tree->Right = InsertString(head, tree->Right, data);//Error 
       } 
      } 
     } 

    } 
    return tree; 
} 

Спасибо!

+1

Где вы «бесплатно» данные? –

+0

Как вы думаете, где я должен освобождать данные? – Tuan

ответ

4

Вы когда-нибудь вызывали free, чтобы освободить память, которую вы выделяете malloc?

Если нет, то вы пропустите всю эту память.

+0

Привет, спасибо, что ответили мне. Можете ли вы объяснить мне, почему мы должны malloc для хранения памяти для хранения данных, а затем мы освобождаем его? – Tuan

+2

@Tuan: Вам бы хотелось получить [хорошую книгу для начинающих C] (http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list). Я не могу в достаточной мере объяснить модель памяти C и лучшие практики для динамического распределения в C в коротком пространстве, доступном для этого ответа. –

+0

Спасибо за это! – Tuan

-2

Используйте инструмент под названием valgrind. Он расскажет вам о таких утечках памяти.

+4

Вы прочитали вопрос? Пятое слово в вопросе - «valgrind». –

Смежные вопросы