10 / 10 / 0
Регистрация: 13.06.2016
Сообщений: 62

Перенос проекта с VS2010 на VS2012 (C++, возврат массива из процедуры)

22.01.2017, 22:30. Показов 823. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
потребовалось перенести проект из VS 2010 в VS2012. ломает логику следующее, если в 2010-ой студии этот код работал как следовало, то в 2012-ой возвращает мусор. как так то?

C++
1
2
3
4
5
char* return_char()
{
char* my_char = "array4815162342";
return my_char;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.01.2017, 22:30
Ответы с готовыми решениями:

Как перенести код с проекта VS2012 в проект VS2010?
Как перенести код с проекта visual studio 2012 в проект на visual studio 2010?

Перенос проекта из VS2008 на VS2010
Писал проект на vs08 , все работало. Сейчас перенес проект на vs10 и сразу(код не менялся) серия ошибок. d3dUtility.obj : error...

После 3-месячного кошмара я вернулся с VS2012 на VS2010
... конечно, если это кому-нибудь интересно. Сразу могу признаться, что победил, как и следовало с самого начала ожидать, VS2012, потому...

8
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
23.01.2017, 09:14
Приведи полный код, где было бы видно, что возвращается "мусор".
0
10 / 10 / 0
Регистрация: 13.06.2016
Сообщений: 62
24.01.2017, 11:31  [ТС]
Убежденный, VS 2012 не учел конфигурацию, и перевел в debug, на котором, как оказалось, в обоих студиях слетает. а с возвратом указателя на объявленный массив в функции такое уже не впервые
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
24.01.2017, 13:41
А тут нет массива, тут строковой литерал, который имеет статическое время жизни.
Так что, как мне кажется, ошибка в совсем другом месте, а этот пример совершенно корректный.
Вот только не видя кода, воспроизводящего проблему, можно лишь гадать...
0
10 / 10 / 0
Регистрация: 13.06.2016
Сообщений: 62
13.02.2017, 21:46  [ТС]
Убежденный, ну вот, еще код, повторюсь, натыкаюсь на это регулярно, только он все равно ничего не скажет:

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
29
30
31
32
33
34
35
36
37
38
39
D3DXVECTOR2 get_2d_position(float x_pos, float y_pos, float z_pos)
{
 
    D3DXMATRIX MatrixCameraY, MatrixCameraX;
    D3DXMATRIX pprojection, pworld, pview;
 
       D3DXMatrixLookAtLH( &pview     ,  &D3DXVECTOR3 ( 0.0f, 0.0f,  0.01f ),
                                      &D3DXVECTOR3 ( 0.0f, 0.0f,  0.0f  ),
                                      &D3DXVECTOR3 ( 0.0f, 1.0f,  0.0f ) );
 
        D3DXMatrixPerspectiveFovLH( &pprojection, D3DX_PI/4, 2.0f, W_width/W_height, 2000.0f );
    D3DXMatrixTranslation(&pworld, -camera_x ,  camera_y, -camera_z);
 
    D3DXMatrixRotationY( &MatrixCameraY,  camera_y_rot );
    D3DXMatrixRotationX( &MatrixCameraX,  camera_z_rot );
    pview =   pview  * MatrixCameraY * MatrixCameraX;
 
    D3DXVECTOR3 *pv;
    D3DXMATRIX m1, m2; 
        D3DXVECTOR3 vec;
    D3DXVECTOR3 pout;
 
    pv = new D3DXVECTOR3[1];
 
     pv[0].x = x_pos;
     pv[0].y = -y_pos;
     pv[0].z = z_pos;
 
    D3DXMatrixMultiply(&m1, &pworld, &pview); 
    D3DXMatrixMultiply(&m2, &m1, &pprojection); 
 
    D3DXVec3TransformCoord(&vec, pv, &m2); 
 
    pout.x =  ( 1.0f + vec.x ) * W_width / 2.0f; 
    pout.y =  ( 1.0f - vec.y ) * W_height / 2.0f;
 
    delete pv;
 
    return D3DXVECTOR2 (pout.x, pout.y);
и еще, причем даже если вывод идет на какой-нибудь мессейгебокс

C++
1
2
3
4
5
6
7
char* int_to_string(int data_in)
{
char out_data[255];
 
sprintf(out_data, "%d", data_in);
return out_data;
}

а вот если добавить const, перед D3DXVECTOR2, начинает работать как надо. нагуглил "visual studio C++ debug return value" и воспользовался этим советом. однако, не разобрался
0
Эксперт .NET
 Аватар для Usaga
12845 / 8873 / 1319
Регистрация: 21.01.2016
Сообщений: 33,309
14.02.2017, 08:53
Nojabr, ты же в курсе, что после выхода из функции, занимаемый ею стёк освободится и содержимое массива out_data (который как раз в стёке размещается) накроется медным тазиком?..

Добавлено через 4 минуты
И ещё: я не спец в С++, но не уверен, что такое допустимо:

C++
1
2
3
pv = new D3DXVECTOR3[1];
...
delete pv;
0
10 / 10 / 0
Регистрация: 13.06.2016
Сообщений: 62
15.02.2017, 13:43  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
после выхода из функции, занимаемый ею стёк освободится
физически, данные после выхода не снесутся, они и дальше будут висеть в памяти, return вернет указатель. если исходить из низкоуровневого программирования, то передается просто адрес в памяти, и уничтожать данные физически - пустая трата ресурсов. но так понимаю, это неправильно, возрастает вероятность ошибки. в debug, где динамические массивы заполняются нулями, видимо, они в таком случае освобождаются.

в общем, как я понял, сложные строки состоящие из переведенных переменных в числа в одну строчку не сгенерировать.
0
Эксперт .NET
 Аватар для Usaga
12845 / 8873 / 1319
Регистрация: 21.01.2016
Сообщений: 33,309
15.02.2017, 14:04
Цитата Сообщение от Nojabr Посмотреть сообщение
физически, данные после выхода не снесутся, они и дальше будут висеть в памяти
Это детали реализации, на которые нельзя полагаться.

Цитата Сообщение от Nojabr Посмотреть сообщение
в общем, как я понял, сложные строки состоящие из переведенных переменных в числа в одну строчку не сгенерировать.
Не совсем понятно о чём речь. Чем не устраивает std::string или выделение массива в куче с помощью malloc / new (если уж любишь усложнять себе жизнь)?
0
22 / 22 / 7
Регистрация: 01.02.2017
Сообщений: 54
Записей в блоге: 1
17.02.2017, 10:36
Потому что строковую константу нужно присваивать константному указателю.
И возвращать тоже.
C++
1
2
3
4
const char* ret_cstring()
{
    return "строковая константа\r\n";
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.02.2017, 10:36
Помогаю со студенческими работами здесь

Преобразования проекта с VS2008 в VS2010
парни вот ссылка на емаил почтавик, он был написан в visual studio 2008, я его открываю в vs 2010 оно его переделывает и выдает 3...

Перенос решения из VS2010 в VS2013
Доброго времени суток. Возникла проблема при переносе решения из VS2010 в VS2013. Решение включает проекты на C# и С++. Проекты C++...

Ошибка при создании проекта в VS2010
Что делать?

Открытие в visual studio 2005 проекта VS2010
собственно это и сам вопрос. возможно ли это? если возможно, то как.

Ошибка при записи в файл проекта (VS2010)
Доброго времени всем! При создании нового проекта(любого) выскакивает следующее сообщение об ошибке(в приложении). Каким образом(не...


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

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

Новые блоги и статьи
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
Lazarus. Таблица с объединением ячеек.
Massaraksh7 21.03.2025
Понадобилась представление на экране таблицы с объединёнными ячейками. И не одной, а штук триста, и все разные. На Delphi я использовал для этих целей TStringGrid, и то, кривовато получалось. А в. . .
Async/await в Swift: Асинхронное программировани­е в iOS
mobDevWorks 20.03.2025
Асинхронное программирование долго было одной из самых сложных задач для разработчиков iOS. В течение многих лет мы сражались с замыканиями, диспетчеризацией очередей и обратными вызовами, чтобы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru