5 / 5 / 1
Регистрация: 08.08.2011
Сообщений: 118

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

09.12.2012, 14:08. Показов 3012. Ответов 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
Модератор
Эксперт по электронике
8982 / 6749 / 921
Регистрация: 14.02.2011
Сообщений: 23,875
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru