Что я не так делаю с указателями? |
Здравствуйте, гость ( Вход | Регистрация )
Что я не так делаю с указателями? |
Shaitan |
26.8.2015, 19:33
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день.
Решил написать небоьшую программу, которая будет читать данные из тектового файла. Данные представляют собой простой список. Id, Name, Field1,Field2. Для начало создал свою структуру:
После Запускается функция в которую передаю Список обработанных строк. Этот список я разбиваю на группы. Группы разделенв ";". Каждую группу я записываю в промежуточный список.
Этот Список передаю в процедуру создание списка указателей структур. По возвращению из неё пытаюсь очищать промежуточный список. И тут у меня лезут ошибки
Если в фунции не создавать указатель на структуру, то промежуточный список нормально очищается. Что я не так делаю? Заранее спасибо! |
|
|
Shaitan |
27.8.2015, 13:03
Сообщение
#2
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: 0 |
ну, при беглом просмотре кода, сразу же в первом блоке: delete &rVar; зачем тут адрес? подумай, что ты удаляешь. вообще, логика кода какая-то странная. ты не проверяешь, что _strList содержит минимум два элемента, хотя обращаешься к ним. потом, вот это условие тоже какое-то малопонятное: leght = _strList.length() - i; while(leght >= i ... Насчёт delete &rVar; Это я пытаюсь очистить память от указателей. Согласен нужно это сделать иначе. Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";" А какие ошибки лезут? Я вечером опишу подробнее. Постараюсь со скриншотами. Если очень кратко. Я создаю список структур, а после я этот список очищаю и высвобождаю память под структурами. |
|
|
Iron Bug |
27.8.2015, 15:32
Сообщение
#3
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Насчёт delete &rVar; Это я пытаюсь очистить память от указателей. Согласен нужно это сделать иначе. это выражение просто вообще смысла не имеет, причём в любом контексте. и оно всегда будет вызывать сбой в памяти. Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";" нет. до конца это списка это никогда не дойдёт, потому что условие leght >= i его выкинет ровно посередине. простая система уравнений Цитата leght = _strList.length() - i; leght = i; даёт Цитата i = _strList.length()/2; так что с логикой тут серьёзные проблемы. |
|
|
Текстовая версия | Сейчас: 24.4.2024, 5:20 |