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