Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Ошибка функции malloc  (Прочитано 4935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zenit084

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Ошибка функции malloc
« : 25 Декабря 2009, 11:08:53 »
При работе с динамической памятью столкнулся с какой-то совершенно непонятной мне ошибкой, которая возникает иногда при выполнении программы (тоесть может десятки раз работать, один вылететь). Сначала конечно подумал, что накосячил где-то с указателями, но вот теперь кажется всё указывает на какой-то непорядок с самой функцией malloc. Во-первых при компиляции вылезает warning следующего содержания: incompatible implicit declaration of built-in function ‘malloc’, и такое вылезает для каждой функции, в которой используется malloc, а во-вторых вот скрины дебага до выполнения совершенно безобидной, казалось бы, строки 136, и после (что указывает на то, что ошибка-таки не в указателях):
http://img13.ЗАПРЕЩЁННЫЙ РЕСУРС/img13/3200/screenshotwk.png
http://img41.ЗАПРЕЩЁННЫЙ РЕСУРС/img41/908/screenshot1qg.png

Кто-нибудь может объяснить, что не так?

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #1 : 25 Декабря 2009, 11:24:03 »
Во-первых при компиляции вылезает warning следующего содержания: incompatible implicit declaration of built-in function ‘malloc’,
Рекомендую именно на это и обратить внимание в первую очередь. Предупреждения для этого и придуманы - привлечь внимание к потенциальной проблеме.

#include <stdlib.h>
в коде присутствует?
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Zenit084

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #2 : 25 Декабря 2009, 11:34:54 »
Действительно, stdlib.h я умудрился забыть подключить. Сейчас подключил, предупреждения исчезли, однако в той строке все равно вылетает.

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #3 : 25 Декабря 2009, 12:35:42 »
однако в той строке все равно вылетает.
Не факт, что проблема именно в этой строке. Вы могли повредить память где-то выше. По представленному куску кода большего сказать не могу.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Zenit084

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #4 : 25 Декабря 2009, 13:05:51 »
Хм, на сколько я понимаю ситуацию, в той строке лишь выделяется память, а указатель на неё записывается в переменную. Как на эти действия могут повлиять какие-либо события, происходившие ранее?

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #5 : 25 Декабря 2009, 13:12:23 »
Хм, на сколько я понимаю ситуацию, в той строке лишь выделяется память, а указатель на неё записывается в переменную. Как на эти действия могут повлиять какие-либо события, происходившие ранее?
Вы могли где-то раньше залезть в область памяти, принадлежащую библиотеке libc, и что-нибудь там испортить, в том числе и функцию malloc().
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Zenit084

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #6 : 25 Декабря 2009, 13:41:56 »
Да, вот об этом я конечно не задумывался. Вроде нашёл-таки маленький косяк с указателями, который проявлялся с вероятностью 1/26, что вроде неплохо согласуется с характером ошибок. Сейчас вроде работает, надеюсь других косяков в проге нету. Спасибо, а то я бы ещё пол дня пытался бы найти ошибку в библиотечной функции. :)

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #7 : 25 Декабря 2009, 13:48:35 »
А ещё есть хороший инструмент для отлова ошибок работы с памятью: http://valgrind.org/ (есть в репозитории)

Может показать, где вы забыли освободить указатель или залезли в невыделенную область и т.п.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Zenit084

  • Автор темы
  • Новичок
  • *
  • Сообщений: 49
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #8 : 25 Декабря 2009, 13:58:34 »
Интересная штука, надо будет разобрать с ней, как время будет. :)

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #9 : 25 Декабря 2009, 15:09:19 »
Для kickstart-а надо скомпилировать программу без оптимизации и с полной дебаг-инфой (-O0 -ggdb3).

После этого запустить ее:

valgrind --leak-check=full --show-reachable=true --log-file=имяфайла --track-origins=yes ./программа аргументы

Будет тормозить ужасно, создаст лог, где все напишет.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Ошибка функции malloc
« Ответ #10 : 26 Декабря 2009, 08:13:28 »
valgrind это для тех кто скорее напишет "помогите найти ошибку в моей программе" а не "malloc не работает"
Миллионы компьютеров под управлением linux/freebsd по всему миру и почти везде стоит glib =) и ни у кого не возникают проблемы именно с malloc
А тут те на. Нашли багу. Мировой скандал!!! Я фигею от таких заяв =)
Zenit084, не позорься, переименуй тему.

 

Страница сгенерирована за 0.016 секунд. Запросов: 22.