![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| konshyn |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Сначала код. Потом вопрос, который не могу решить. Он в пару строк:)
файл A.h
Файл А.с
Файл main.c
Я хочу сделать в стиле сишных библиотек свою. Есть функция, которая инициализирует структуру и возвращает на нее указатель. А потом передавать этот указатель в другие функции, которые будут что-то делать, скрывая свои действия от пользователя, и возвращать результат. как это происходит в libnet, mysql-client и т.п. В коде, что выше, я показал пример. Но в функции use() происходи segmentation fault. Не могу разобраться. помогите, плиз -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
оно до use доходит? <line 24>
но если и доходит, то <line 36> а в остальном, прекрасная маркиза, все хорошо, все хорошо |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
Сначала нашел ошибку, а потом только открыл Ваш код:) А вообще, забавное совпадение с ошибкой, хотя причины разные. этот код всего лишь миниатюрная версия того, что я написал и где сделал ошибку. и здесь тоже - по невнимательности. в своей библиотеке тоже нашел ошибку. мини-код:
думаю, что знающие поняли ошибку. а незнающие, если интересно, пусть подумают. если никто не объяснит в комментариях ошибку, то позже разъясню. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| baldman88 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 210 Регистрация: 18.1.2009 Репутация: 3 Всего: 7 |
И, если не секрет, где здесь ошибка?
Если функция get_new_cell возвращает нормальный указатель (а вдруг она вернет NULL), то, по идее, все должно работать. В противном случае сегфолт будет в функции push_in_new_cell. При работе с указателями лучше всегда проверять их на валидность перед использованием. |
|||
|
||||
| konshyn |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 295 Регистрация: 19.9.2013 Репутация: нет Всего: нет |
get_new_cell всегда возвращает валидный указатель. все дело в передаче указателя cell из функции push() в функци. push_in_new_cell() Добавлено через 1 минуту и 10 секунд P.S. Если бы функция get_new_cell возвращала когда-либо невалидный указатель, то в сообщение я бы включил и ее код. -------------------- «Потому что ценность акта действия в этой стране возрастает в несколько раз». |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
baldman88, параметры передаются по значению
|
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |