14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||
1 | ||||||
Ошибка при освобождении памяти26.10.2011, 08:59. Показов 1301. Ответов 18
Метки нет (Все метки)
Все идет замечательно, но вот когда происходит удаление массива программа крашится..
0
|
26.10.2011, 08:59 | |
Ответы с готовыми решениями:
18
Ошибка при освобождении памяти Ошибка при освобождении памяти Ошибка при освобождении памяти Ошибка при освобождении памяти |
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||
26.10.2011, 15:33 [ТС] | 3 | |||||
да да. все верно. при использовании
все отлично освобождается.
вот только у меня есть допустим:
0
|
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
|
|
26.10.2011, 15:49 | 4 |
0
|
Заблокирован
|
||||||
26.10.2011, 16:00 | 5 | |||||
GBIT, думаю от конца нужно удалять к тому же этим
как мне кажется уже высвобожденную память удалить пытаемся Вот код без бага при выходе...
0
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
|
26.10.2011, 16:26 [ТС] | 6 |
точно не знаю по чему, но это
точно не работает. при таком выделении памяти получается не массив строк, а... что то другое Такое освобождение памяти мне подсказали тут И мне кажется это правильное освобождение.. Код
типа есть массив: [quote=GBIT;2105382]char **TableH = new char* [n]; for(i=0;i<n;i++) TableH[i] = new char[32];[/quote] [] + 31а ячейка [] [] [] [] [] [] ... [] [] + 31а ячейка [] [] [] [] [] [] ... [] [] + 31а ячейка [] [] [] [] [] [] ... [] ... [] + 31а ячейка [] [] [] [] [] [] ... [] получается картина: Код
[X] + 31а ячейка [] [] [] [] [] [] ... [] [X] + 31а ячейка [] [] [] [] [] [] ... [] [X] + 31а ячейка [] [] [] [] [] [] ... [] ... [X] + 31а ячейка [] [] [] [] [] [] ... [] [X] - это та память, что мы освободили
0
|
Заблокирован
|
|
26.10.2011, 16:41 | 7 |
ох и кучу всего написал-
Удаление идёт ступенчато, каждый раз удаляется последняя строка в текстовом блоке TableH... Не по теме: Эмм и не стоит всему слепо верить, что вам на форуме пишут, вспомните хотя бы про wav-файл, помнится там вам 10 постов сделали, а достаточно было двух моих примеров;)
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|||||||||||
26.10.2011, 16:41 | 8 | ||||||||||
GBIT,
0
|
Заблокирован
|
|
26.10.2011, 16:47 | 9 |
-
У вас идёт связный блок abcd efgh ijklm nopq И тут вы хотите чтобы стерев abcd, ячейка а по прежнему на оставшуюся память указывала ---- efgh ijklm nopq Как по мне так странновато! Добавлено через 1 минуту - где в коде GBIT, условный оператор, как я понял там инициализация строки предполагалась
0
|
26.10.2011, 16:57 | 10 |
0
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||
26.10.2011, 16:58 [ТС] | 11 | |||||
что это значит? 8)
можно еще доступнее? Не по теме: да да еще доступнее) в смысле что удаление с самой последней ступени поднимается вверх? вот именно так я у себя и переделал. но все же не понятно почему не работает? ой. я тут хотел поставить сравнение на равенство
0
|
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
26.10.2011, 16:59 | 12 | |||||
GBIT, у меня Ваш код работает и так нормально (компилятор - minigw).
Хотя вот это лучше исправить
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
26.10.2011, 17:04 | 13 |
Да не надо указателям присваивать указатели. Зачем несколько указателей на одну область памяти? Надо копировать и записывать в область памяти.
0
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||
26.10.2011, 17:12 [ТС] | 14 | |||||
это я не указатели делал. просто инициализировал значением весь массив строк.
потом то и применялся
0
|
Заблокирован
|
|
26.10.2011, 17:19 | 15 |
Gepar, у
GBIT, стоит скорее всего Visual Studio и то что прокатит в MinGW может не прокатить в студии, например в студии нет Variable Length Array GBIT, мне сложно рассказать ещё доступней - доступней так выделив память у вас в руках появился портфель, и тут вы хотите его постепенно сжечь, вы пережгли ручку и портфель упал на замлю и доступа к нему уже нет, другое дело если вы подожжёте портфель со стороны дна, так же и с массивом - это неверно, строки сравниваются как и сказал ForEveR, strcmp После выделения памяти в массив вы ничего не записали, тогда откуда надеетесь в строке хоть один символ для сравнения найти - она же ещё пуста...
0
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
26.10.2011, 17:21 | 16 |
-=ЮрА=-, Я ни на что не надеюсь. Я говорю что стоит использовать strcpy/strncpy для копии. strcmp/strncmp для сравнения.
0
|
ForEveR
|
26.10.2011, 17:39
#18
|
Не по теме: -=ЮрА=-, Я неправильно понял сообщение. Ссори.
0
|
14 / 14 / 5
Регистрация: 05.10.2011
Сообщений: 223
|
||||||||||||||||
26.10.2011, 18:30 [ТС] | 19 | |||||||||||||||
все верно -=ЮрА=-, vs 2010 ultimate
как это я ничего туда не записал? а как же цыкл
* * * ну и в целом резюмируя все выше сказанное. • понял что работать со строками нужно через функции str • для освобождения памяти от массива
0
|
26.10.2011, 18:30 | |
26.10.2011, 18:30 | |
Помогаю со студенческими работами здесь
19
Ошибка при освобождении памяти? Ошибка при освобождении памяти Ошибка при освобождении памяти Ошибка при освобождении памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |