![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Shaitan |
![]() ![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день.
Решил написать небоьшую программу, которая будет читать данные из тектового файла. Данные представляют собой простой список. Id, Name, Field1,Field2. Для начало создал свою структуру:
После Запускается функция в которую передаю Список обработанных строк. Этот список я разбиваю на группы. Группы разделенв ";". Каждую группу я записываю в промежуточный список.
Этот Список передаю в процедуру создание списка указателей структур. По возвращению из неё пытаюсь очищать промежуточный список. И тут у меня лезут ошибки
Если в фунции не создавать указатель на структуру, то промежуточный список нормально очищается. Что я не так делаю? Заранее спасибо! |
|
|
Trisch |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
А какие ошибки лезут?
|
|
|
Iron Bug |
![]()
Сообщение
#3
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
ну, при беглом просмотре кода, сразу же в первом блоке:
зачем тут адрес? подумай, что ты удаляешь. вообще, логика кода какая-то странная. ты не проверяешь, что _strList содержит минимум два элемента, хотя обращаешься к ним. потом, вот это условие тоже какое-то малопонятное:
не исключено, что там ещё есть ошибки логические. в общем, внимательнее надо код писать. |
|
|
Shaitan |
![]()
Сообщение
#4
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ну, при беглом просмотре кода, сразу же в первом блоке: delete &rVar; зачем тут адрес? подумай, что ты удаляешь. вообще, логика кода какая-то странная. ты не проверяешь, что _strList содержит минимум два элемента, хотя обращаешься к ним. потом, вот это условие тоже какое-то малопонятное: leght = _strList.length() - i; while(leght >= i ... Насчёт delete &rVar; Это я пытаюсь очистить память от указателей. Согласен нужно это сделать иначе. Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";" А какие ошибки лезут? Я вечером опишу подробнее. Постараюсь со скриншотами. Если очень кратко. Я создаю список структур, а после я этот список очищаю и высвобождаю память под структурами. |
|
|
Iron Bug |
![]()
Сообщение
#5
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Насчёт delete &rVar; Это я пытаюсь очистить память от указателей. Согласен нужно это сделать иначе. это выражение просто вообще смысла не имеет, причём в любом контексте. и оно всегда будет вызывать сбой в памяти. Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";" нет. до конца это списка это никогда не дойдёт, потому что условие leght >= i его выкинет ровно посередине. простая система уравнений Цитата leght = _strList.length() - i; leght = i; даёт Цитата i = _strList.length()/2; так что с логикой тут серьёзные проблемы. |
|
|
Shaitan |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата(Shaitan @ 27.8.2015, 15:03) * Вторая странность это я узнаю длину списка и перебираю его до того пока не упрусь в ";" нет. до конца это списка это никогда не дойдёт, потому что условие leght >= i его выкинет ровно посередине. простая система уравнений Цитата leght = _strList.length() - i; leght = i; даёт Цитата i = _strList.length()/2; так что с логикой тут серьёзные проблемы. Чёрт. тут опечатка у меня. Должно быть: leght = _strList.length() - 1; так как масив от нуля считается, потому и минус 1. Спасибо за ошибку. Вечером постараюсь пересмотреть код. Вопрос. Очистку списка структур я правильно делаю? |
|
|
Shaitan |
![]()
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А какие ошибки лезут? После того отработала моя функция runLineCode, я очищая промежуточный список:
на строке strListLine.clear(); мой код выкидывает в qarraydata.h
на строку QArrayData::deallocate(data, sizeof(T), Q_ALIGNOF(AlignmentDummy)); Странно почему тут ошибка. Вот исправленная функция после Ваших замечаний:
|
|
|
Shaitan |
![]()
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Причину нашёл. Я не инициализировал указатель на структкру.
var = new RVariable(); Проблема решена. Всем спасибо! |
|
|
Iron Bug |
![]()
Сообщение
#9
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
Спасибо за ошибку. да не за что. это твоя ошибка, ты её сам сделал ![]() код надо писать внимательно. если опыта нет, то тем более не нужно торопиться. например, ты уверен, что это условие написано правильно?
|
|
|
Shaitan |
![]()
Сообщение
#10
|
Новичок Группа: Новичок Сообщений: 8 Регистрация: 22.7.2015 Пользователь №: 4418 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 2.3.2025, 17:55 |