![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
Вобщем проблема такая:
я выделил слолько-нибудь памяти
теперь мне надо еще. Как добавить еще памяти? ЗЫ C тока начал учить, потому вопрос может быть и ламерский.... Это сообщение отредактировал(а) BSOD - 9.2.2006, 17:15 -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
-------------------- Теперь при чем :P |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
сэнкс
-------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
малость не работает....
int *g[10000],*p[10000],*kg; a=1 b=2 c=3 -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Ignat |
|
||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
Я вот в эти две строчки вообще не въехал:
Здесь вообще ничего не меняется (под *g[a] и так уже была выделена память объемом в sizeof(int) ):
-------------------- Теперь при чем :P |
||||
|
|||||
| BSOD |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
дык а как именно добавить(!) еще один int?
впринципе их можно заменить на any_action(); -------------------- как корабль назовешь - то на нем и напишешь |
||||
|
|||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Нужно накапливать где-то размер компонент g[], чтобы писать в realloc вместо sizeof(int) этот размер.
А вообще - несравнимо удобнее vector, его для того и писали. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
realloc используется для изменения памяти отведенного под тип данных. Т.е. как увеличения, так и уменьшения. Второй параметр определяет новый размер памяти, отведенный тип, в данном случае int. Это необходимо, если нужно, к примеру, строку char[32] удлиннить до char[64]. Но тип int имеет стандартную длину 32 бита, его можно привести к типам short и long. А добавить можно инкрементировав индекс указателя.
А вот если будет any_action, то и ошибка будет другой, либо её не будет вообще. Т.к. ошибка именно в этих строках. -------------------- Теперь при чем :P |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
не, малость не то... g - какое-то подобие двумерного массива, тока с разной длинной строк, причем нужно динамически удлиннять эти строки.
ну any_action_with_p_or_g(); -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
А для эффективности их еще не по одному элементу желательно удлинять - снова std::vector.
|
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
вектор это конечно хорошо, но т.к. я решаю олимпиадную задачу => <vector.h> подключать низя... =(
нуна все-таки думать самому.... -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
тогда определи двумерный массив указателей, если уж собрался два индекса использовать.
-------------------- Теперь при чем :P |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
все... разобрался... c realloc я все делал правильно... я как обычно забыл обнулить kg (не бейте меня сильно, я с паскаля пережжаю... там такое иногда прокатывает =) )
-------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| BSOD |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 405 Регистрация: 1.11.2004 Где: Гомель Репутация: нет Всего: 3 |
Так... проблемы продолжаются...
с небольшими m,n,a,b,c.. прога работает на ура, а вот если m=9999 и n=10000 вылетает access violation, при чем не сразу..
Немного поясню что это: Вобщем я решаю задачу: Есть граф с n вершинами и m ребрами, нужно найти кратчайший путь из одной вершины в другую. Оюычнай дейкстра не подходит (по времени) + если просто хранить граф в двумерном массиве (вершины смежные с текущей) - не влазит по памяти. Нужно написать дейкстру с кучей + "извратный" (динамический) массив. Дейкстру с кучей я написал а вот с "извратным" массивом - проблемы.... походу - учу C++ Это сообщение отредактировал(а) BSOD - 9.2.2006, 23:35 -------------------- как корабль назовешь - то на нем и напишешь |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 3 Всего: 73 |
Только это C без ++ В стиле C++ выделение памяти делается оператором new. К вопросу об access violation: рекомендуется проверять выделилась ли память, примерно так:
-------------------- Теперь при чем :P |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |