С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
#1

Visual Studio 2008 Release - версия приложения, не объявляется переменная - C++

03.12.2012, 19:10. Просмотров 581. Ответов 6
Метки нет (Все метки)

Здравствуйте, у меня вопрос по Release-версии проекта.
Есть проект, отладочная версия компилируется и работает нормально. Релиз версия компилируется, но в процессе работы возникает ошибка. Ошибка возникает при попытке доступа к элементу массива через индекс. Индекс-переменная. Как оказалось, в релизной версии ее вообще нет... Вот код функции:
Кликните здесь для просмотра всего текста


C++ (Qt)
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
TCHAR buf[200]={0};//Для сохранения строки из pLBField
    pLBField->GetText(y,buf);//Чтение строки
    pLBField->DeleteString(y);//Удаление строки
    for(int k=x;(buf[k]==' ')||(buf[k]=='\0');k--)//Очистка места для строки матрицы
        buf[k]=' ';
    buf[x]=name;//Запись имени матрицы
    pLBField->InsertString(y,buf);//Сохранение получившейся строки
    for(int i=y+1;i<y+m+1;i++)//Запись строк матрицы
    {
        for(int v=0;v<200;v++)
            buf[v]=0;
        pLBField->GetText(i,buf);//Чтение строки
        pLBField->DeleteString(i);//Удаление строки
        TCHAR BufDouble[255]={0};//Строка для элемента матрицы
        for(TInd k=0;k<n;k++)//Отображение всех элементов матрицы, находящихся на строке i-y-1
        {
            short 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(short l=0;l<GetDoubleLength(Matrix[i-y-1][k],Accuaracy);l++)//Запись элемента матрицы в строку buf
                buf[MaxX++]=BufDouble[l];//-----------------------Здесь вылет в релизной версии
        };
        pLBField->InsertString(i,buf);//Сохранение получившейся строки
    };

Как мне кажется, все дело в переменной MaxX(Объявляется в цикле for(TInd k=0;k<n;k++) ). В отладочной версии она есть. В релизной версии ее нет.

Появляется такая ошибка: "Unhandled exception at 0x0040355a in MatrixWnd.exe: 0xC0000005: Access violation writing location 0x00131644." Можете подсказать, что делать? Искал похожие вопросы-только в одном случае сказали, что дело в "скрытых" ошибках(те, что в отладочной версии не ловятся). Что это за ошибки? Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 19:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Visual Studio 2008 Release - версия приложения, не объявляется переменная (C++):

Debug и Release сборки в Visual Studio - C++
Я начал писать проект на c++ с использованием sfml. При сборке тестовой программы в версс debug потребление памяти составляет примерно 22...

Как создать release проекта в MS Visual Studio? - C++
Здравствуе. У меня Visual 2013 Компилирую простую программку, ставлю release #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

C++ Visual Studio 2017 режим Debug и Release - C++
C++ Visual Studio 2017 проблемы с режимом Debug и Release Почему в режиме дебага все нормальное, а в режиме релиза не хочет считать...

Написать программу. Задания нужно выполнять на языке Visual C++ в среде Microsoft Visual Studio 2008 - C++
Можете написать программу? Задание по номером 3.24 (2 рисунок).

Как в Visual Studio задать имя файла при запуске Release через Ctrl + F5? - C++
Я переименовал выходной файл в режиме Release в свойствах Linker-&gt;General-&gt;Output, но при попытки из студии как обычно запустить...

несовместимость visual c++ 6.0 и visual studio 2008 - C++
почему правильно написанная программа в visual c++ 6.0 не работает в visual studio 2008 , а именно #include &lt;iostream&gt; using namespace...

6
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.12.2012, 19:24 #2
Цитата Сообщение от PazDim Посмотреть сообщение
Что это за ошибки? Заранее спасибо
скорее всего вылезли за пределы выделенной памяти (за пределы массивов).
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
03.12.2012, 19:34  [ТС] #3
В дебаг-версии не вылезал... Вылез из-за переменной MaxX, которая судя по всему не инициализируется
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.12.2012, 19:38 #4
Цитата Сообщение от PazDim Посмотреть сообщение
В дебаг-версии не вылезал... Вылез из-за переменной MaxX, которая судя по всему не инициализируется
Пройдитесь в отладчике с такими же данными, при которых вылетает ошибка, и посмотрите, в какой строчке вылетает ошибка, а так же содержание переменных.
0
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
03.12.2012, 20:52  [ТС] #5
Пробовал, при таких же данных. В строке 23 MaxX=0(в Debug). В релиз версии посмотреть не получается, потому что этой переменной НЕТ. Почему-не знаю. При попытке установить точку трассировки в окне вывода отображается, что не найден MaxX(это в релиз версии, в дебаг версии выводится значение MaxX). Думаю, что выход за пределы массива buf происходит из-за того, что в MaxX лежит что-нибудь типа -24521... Повторюсь, в версии debug все работает правильно

Добавлено через 16 минут
Забыл добавить(надеюсь, некритично): проект Win32, использует MFC
0
Croessmah
Ушел
Эксперт CЭксперт С++
13558 / 7708 / 872
Регистрация: 27.09.2012
Сообщений: 18,996
Записей в блоге: 3
Завершенные тесты: 1
03.12.2012, 20:55 #6
Цитата Сообщение от PazDim Посмотреть сообщение
). В релиз версии посмотреть не получается, потому что этой переменной НЕТ.
Тогда попробуйте её объявление вынести из циклов в начало функции.
1
PazDim
5 / 5 / 0
Регистрация: 08.08.2011
Сообщений: 93
03.12.2012, 22:00  [ТС] #7
Без толку . В релиз версии она просто не существует...
0
03.12.2012, 22:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 22:00
Привет! Вот еще темы с ответами:

несовместимость visual c++ 6.0 и visual studio 2008 - C++
почему правильно гаписанная программа в visual c++ 6.0 не работает в visual studio 2008 , а именно #include &lt;iostream&gt; ...

Visual Studio 2008 - C++
Здравствуйте.У меня студия 2010 (экспресс-версия) поставилась,но при запуске уже когда ввел уже код(я уже активировал когда-то,но тогда 7...

Visual studio 2008 C++ - C++
Вычислите сумму элементов верхнего правого треугольника матрицы и количество элементов в нем. матрица размером 5x5

Калькулятор на MS Visual Studio 2008 C++ - C++
Если была такая тема, плиз киньте ссылочку на исходник. Очень нужен. Хотябы простой с обычными действиями. Добавлено через 23 минуты ...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.