Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
5 / 5 / 1
Регистрация: 08.08.2011
Сообщений: 118

MFC, указатель на CListBox, Release версия

09.12.2012, 14:08. Показов 2892. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня проблема:
Есть форма, на ней- ListBox, в программе задан как указатель(CListBox *pLBField). Есть функция, которая работает с этим элементом управления через указатель. Принимает она этот указатель в качестве аргумента. В Debug версии все работает правильно-функция принимает указатель, осуществляет работу с ListBox-ом. В Release версии творится что-то непонятное(уже создавал тему про предыдущую проблему-не объявлялись переменные в релиз версии, вроде как-то решил проблему). Сейчас проблема в том, что в какой-то момент времени(точно не знаю) что-то происходит с указателем. Сначала он принимает значение 0, потом ffffffff, хотя я его вообще не трогаю, только читаю и пишу строки... Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
void CMatrix::MatrView(CListBox *pLBField,short x,short y)
{
    TCHAR buf[130]={0};//Для сохранения строки из pLBField
    pLBField->GetText(y,buf);//Чтение строки
    pLBField->DeleteString(y);//Удаление строки
    for(int a=x;(buf[a]==' ')||(buf[a]=='\0');a--)//Очистка места для строки матрицы
        buf[a]=' ';
    buf[x]=name;//Запись имени матрицы
    pLBField->InsertString(y,buf);//Сохранение получившейся строки
    for(short i=y+1;i<y+m+1;i++)//Запись строк матрицы
    {
        for(int v=0;v<130;v++)//Обнуление все йстроки
            buf[v]=0;
        pLBField->GetText(i,buf);//Чтение строки
        pLBField->DeleteString(i);//Удаление строки
        TCHAR BufDouble[255]={0};//Строка для элемента матрицы
        for(TInd k=0;k<this->n;k++)//Отображение всех элементов матрицы, находящихся на строке i-y-1
        {
            char MaxX=x+k*GetMaxElemWidth()+k;//Начальная позиция для отображения строки элементов матрицы
            sprintf (BufDouble, "%f",Matrix[i-y-1][k]);//Преобразование элемента матрицы в строку
            for(int q=MaxX+x;(buf[q]==' ')||(buf[q]=='\0');q--)//Очистка местя для элемента матрицы
                buf[q]=' ';
            for(TInd l=0;l<GetDoubleLength(Matrix[i-y-1][k],Accuaracy);l++)//Запись элемента матрицы в строку buf
                buf[MaxX++]=BufDouble[l];
        };
        pLBField->InsertString(i,buf);//Сохранение получившейся строки
    };
};
Значение на ffffffff указатель меняет после четвертой строки. Но если удалить все строки с 10-й по 27-ю, то функция работает номально(то есть делает часть задачи). Значение смотрел в отладчике, это неправильно для Release-версии, да? В общем, на строке 26 вылетает с ошибкой
"First-chance exception at 0x00403406 in MatrixWnd.exe: 0xC0000005: Access violation reading location 0x20349420.
Unhandled exception at 0x00403406 in MatrixWnd.exe: 0xC0000005: Access violation reading location 0x20349420."
Пожалуйста, подскажите, в чем дело. Читал, что дело может быть в указателе. Но в отладочной версии все работает, значит, с указателями все впорядке(я pLBField и не трогаю вообще).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.12.2012, 14:08
Ответы с готовыми решениями:

MFC CListBox
Всем здравствуйте. Как можно сделать поиск в ListBox по нажатии на кнопку только одного элемента...

Смена цвета элемента в CListBox MFC
Здравствуйте. Подскажите, пожалуйста, нужно, чтоб при появлении надписи &quot;Invalid value&quot; элемент...

Про указатель *, указатель на указатель **, и про new
#include &quot;stdafx.h&quot; class neuro { public: double *inputs; int inputs_count; ...

21
5 / 5 / 1
Регистрация: 08.08.2011
Сообщений: 118
09.12.2012, 22:50  [ТС]
Студворк — интернет-сервис помощи студентам
Так получается, я пытаюсь прочесть строку, которой нету? Если бы весь листбокс был заполнен пустыми строками, все бы работало?

Добавлено через 19 минут
В общем, установил размер buf=800. Решение конечно не очень правильное, но другое придумывать нет времени. Будет работать в любом случае?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
09.12.2012, 22:55
Цитата Сообщение от PazDim Посмотреть сообщение
. Будет работать в любом случае?
никто гарантий дать не может
я тебе показал несколько способов
решать тебе
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
09.12.2012, 22:55
Помогаю со студенческими работами здесь

Как получить ссылку на указатель или указатель на указатель в массиве?
В процессе реализации сортировки пузырьком натолкнулся на такую проблему: как поменять значения...

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top...

Можно ли, используя указатель, а не указатель на указатель, обработать все элементы двумерного массива?
Можно ли, используя указатель, а не указатель на указатель, обработать все элементы двумерного...

Visual Studio 2008 Release - версия приложения, не объявляется переменная
Здравствуйте, у меня вопрос по Release-версии проекта. Есть проект, отладочная версия...

Окончательная версия проекта. Создание Release
У меня такая вот делема, когда я создают программу в VS 2012 c++ то она работает на моем только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор значений справочника
Maks 21.03.2026
Установка программного отбора значений справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru