Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при вызове malloc(), ищу качественный шаманский бубен... 
V
    Опции темы
Rpahut
Дата 20.4.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



Есть значит следующий код, который уже заставляет меня лезть на стену smile 

Код

if(inst->someVar) {
    free(inst->someVar);
}
inst->someVar = malloc(sizeof(someType));

.....................

if(inst->someVar) {
    free(inst->someVar);
}


На данный момент этот код успевает выполниться только полтора раза, т.к. при втором проходе malloc вышибает... Подскажите, в чем может быть проблема? 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
nostromo
Дата 20.4.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: нет
Всего: 10



1. Чему равен sizeof(someType)?
2. После первого прохода inst not NULL ?

Добавлено @ 14:27 
Да, и что собственно означает "код вышибает"? Какая именно ошибка? 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
Rpahut
Дата 20.4.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



1. 20
2. Да

Ошибка из разряда "Обнаружена ошибка , приложение будет закрыто" ). Пишется собственно плагин-дллка для проги lightwave3d, так что как в дебаг ее запустить не представляю. 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
likehood
Дата 20.4.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


666
**


Профиль
Группа: Участник
Сообщений: 536
Регистрация: 21.12.2005

Репутация: 8
Всего: 24



А разве не надо делать явное приведение к someType* при вызове malloc'а? 
PM MAIL   Вверх
nostromo
Дата 20.4.2006, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 194
Регистрация: 23.3.2006

Репутация: нет
Всего: 10



Цитата

так что как в дебаг ее запустить не представляю.  


Если под MS Visual Studio, то
Tools -> Debug Processes, выбираешь lightwave, жмешь Attach 
и все точки останова работают. 
--------------------
На пыльных тропинках далеких планет останутся наши следы.
PM MAIL   Вверх
Rpahut
Дата 20.4.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



nostromo, а если visual MinGW ? =) 
Блин, я уже просто незнаю что делать. Пробовал принимать указатель от malloc в другую переменную, пробовал вместо sizeof ручками число ставить... натуральное шаманство... результат все тот же 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Earnest
Дата 20.4.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



А не пробовал обнулять переменную после освобождения? smile 
Очень похоже на повторное освобождение. Оно разрушает хип, после чего вылетает malloc... 


--------------------
...
PM   Вверх
Rpahut
Дата 20.4.2006, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



Earnest, пробовал.
Но если повторное освобождение может быть причиной такого поведения маллока, буду копать в этом направлении. 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
bilbobagginz
Дата 20.4.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 3
Всего: 317



1. насчет дибажить неизвестное, насколько имхо позволяет мне выражаться, gdb прекрасно присасывается к бегущему процессу. man gdb тебе в руки.

2. насчет молока... ты после каждого фри делай ptr=NULL, так, на всякий случай вонючий.

3. насчет проекта: ты когда компиляешь, запускай компилятор в супер болтливом режиме, чтобы он тебе все что ему, его маме и его деду не нравится и не нравилось - тебе говорил.
напр, если с ANSI проблем нет, попробуй: gcc -ansi -pedantic -Wall file.c
и тогда может тебе компилятор намекнет... сам.
  
4. не обижайся, но ... ты случайно сам inst не освободил ? ну т.е. я бы этот код заключил бы в:

Код

if (inst){
/**
 * твой код 
 **/
}
else{
   printf("ни фига себе...\n");
   ffush(stdout);
 /** чё-нить такое... */
}
 

Это сообщение отредактировал(а) bilbobagginz - 20.4.2006, 17:01


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Doc_d0s
Дата 20.4.2006, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 206
Регистрация: 15.12.2004
Где: в кресле

Репутация: 2
Всего: 3



приводи тип к someType 
--------------------
Админ- это вождь Apache'й :)
PM MAIL ICQ   Вверх
Rpahut
Дата 20.4.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



Цитата

man gdb тебе в руки

Похоже к тому все и идет...

Цитата

ты после каждого фри делай ptr=NULL
...
ты случайно сам inst не освободил ?

я уже проверяю все что нужно и что ненужно, реорганизовал сейчас вообще выделение памяти, по идее должно теперь автоматически проверяться и обнуляться

Цитата

приводи тип к someType

Пробовал. Вроде как приведение типов на код не влияет? В любом случае, не помогло.

Пойду ковырять дальше, о результатах доложу =) 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
Rpahut
Дата 21.4.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


0xdeadbeef
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 9.4.2006

Репутация: 2
Всего: 7



Как и следовало ожидать, дело было не в бобине...
Аккуратно прошелся по выделению и освобождению памяти, подправил где нашел неточности, в результате все заработало (почти) как нужно.

Думаю, вопрос можно считать решенным. Всем спасибо. 
--------------------
C/C++ GameDevRSS Раздела программирования игрOpenGL - уроки от NeHeКак продать идею?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1077 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.