![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| MaXL |
|
||||||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Всем привет. Поискал на форуме ничего не нашёл. Вообще проблема такая:
пишу библиотеку для работы с динамическим массивом на Си. Определены следующие типы данных:
Ну и вот функции, которые уже написаны(ну и в которых уже есть проблемы) :
Ну а вот так я его использую:
Ну и как было выяснено в цикле, при втором вызове функции добавления элемента, функция realloc возвращает 0. Куда копать я даже и не знаю =( -------------------- MaXL |
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
ну на вскидку - вы arrCont не инициализируете (если я ниче не упустил)
Добавлено @ 06:16 ...и стиль какой-то из каменного века - дефайн на NULL, типы переопределены... ну зачем вот переопределен void *? чтоб потомков запутать? или вы мелкомягким подражаете а может лучше C++заюзать и не мучить задницу? там и вектор есть темплейтный Это сообщение отредактировал(а) J0ker - 20.9.2008, 06:16 |
|||
|
||||
| MaXL |
|
||||||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
ну вот вписал в функцию создания такую строчку:
только вот это не исправило ситуации. Пытался сделать инициализацию через malloc, путм передачи ей в качестве параметра "0" но эффект тот же(ну это и так понятно, потому что malloc вернёт ноль, если ей передать нулевой размер). Так вот ещё получилось небольшой прикол. Я пишу в Code::Blocks, с использованием компилятора MinGW. Если запускать программу "средой", т.е. просто нажать F9 подождать пока скомпилица и запуститься то отлетает на втором проходе цикла и при этом программа вылетет с кодом, отличным от нуля. А если запустить через Far то на 72-ом проходе цикла, и выходет всё как нужно. Что же всё таки такое может быть ? видите ли в чём дело, нам препод в универе дал файл *.h в котором объявлены эти типы данных(кроме моих структур) а также сигнатуры функций. А мне нужно сделать реализацию именно на языке Си. Ну т.е. получиться библиотека. Её нужно отослать на сервак, там юнит тесты, если всё пройдёт то Ok, потом преподу ещё код отдельно сдавать, он будет спрашивать чо да как.
преподу задавли вапрос "Можно на Си++ или Делфи ?", Делфи - обойдетесь. Си++ там есть уже готовый STL. ну впринципе я с ним частично согласен, хоть понять можно будет чо такое Си, Си++ будет в следующем семестре. -------------------- MaXL |
||||||
|
|||||||
| MaXL |
|
||||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Ну и ещё, если убрать строчку
то всё работает, оно добавляет как надо и т.п. Но ведь это не правильно, получается я так могу акие-нить другие данные затереть... ------ До кучи: переписал момент выделения памяти, под новый массив, получилось вот так:
и всё стало работать. А теперь внимание вапрос, что не так было ранее ? ведь я так понимаю функция realloc работает именно так, как я тут показал(ну там может ещё проверки какие-нить есть). Это сообщение отредактировал(а) MaXL - 20.9.2008, 11:38 -------------------- MaXL |
||||
|
|||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 3 Всего: 22 |
Вот здесь косяк был
Элемент t_handle->arrCont[t_handle->elementsCount] лежит за границей массива |
|||
|
||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
да точно в логику не углублялся и цикл вам не нужен - замените на memmove только граицы правильно считайте на сей раз Добавлено @ 17:46 это не эффективно верните realloc и замените цикл на memmove Это сообщение отредактировал(а) J0ker - 20.9.2008, 17:55 |
||||
|
|||||
| MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
J0ker, vinick, пасиб за помощь. Переписал, но вот только бес использования memmove. Почему-то она не заработало. Пробовал просто для одного массива потестить всё работает, а если с той структурой то не работает. Ну да ладно, уже полностью написал библиотеку, залил в систему, прошла все 34 теста. Всем пасиб.
P.S. вот такой код получился:
-------------------- MaXL |
|||
|
||||
| vinick |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 3 Всего: 22 |
sorry, фигню здесь написал. У J0ker'а ниже правильный вариант.
Это сообщение отредактировал(а) vinick - 22.9.2008, 20:55 |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 4 Всего: 14 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |