Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++
Войти
Регистрация
Восстановить пароль
 
Quntgo
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
1

Через раз после запуска программы выдаёт ошибку(причём разные)

10.01.2018, 11:14. Просмотров 308. Ответов 5
Метки нет (Все метки)

GetFolder.h
C++
1
2
3
4
5
6
7
8
9
10
11
#pragma once
#include <Shlobj.h>
char* GetF(int CSIDL_)
{
    char* str_result = new char;
    HRESULT res = SHGetFolderPath(NULL, CSIDL_, NULL, SHGFP_TYPE_CURRENT, str_result);
    if (res == S_OK)
        return str_result;
    else
        return (char*)"cant_find";
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string>
#include "GetFolder.h
int main()
{
    string csidl = GetF(CSIDLget);
    string final_folder = csidl + PATH;
    int CheckCreateFolder = SHCreateDirectoryEx(NULL, final_folder.c_str(), NULL);       //обычно ошибки появляются с этого места
    cout << CheckCreateFolder << endl;
    return 0;
}
Иногда срабатывает корректно,а иногда "Программа не отвечает", либо кидает на код в locale0.cpp с точкой останова
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
_MRTIMP2_PURE_NPURE void __CLRCALL_PURE_OR_CDECL _Locinfo::_Locinfo_dtor(_Locinfo *pLocinfo)
    {   // destroy a _Locinfo object, revert locale
    if (!pLocinfo->_Oldlocname._Empty())
        setlocale(LC_ALL, pLocinfo->_Oldlocname._C_str());
    }
_STD_END



А иногда сюда
Кликните здесь для просмотра всего текста
C++
1
2
3
#ifdef _DEBUG
                _Myptr = (_Elem *)_malloc_dbg(_Count, _CRT_BLOCK,
                    __FILE__, __LINE__);


Добавлено через 9 минут
PATH,CSIDLget указаны через #define
Папка создаётся,но при этом всё равно иногда вылетают ошибки
P.S.
Цитата Сообщение от Quntgo Посмотреть сообщение
#include "GetFolder.h
там вторая комма стоит, с ней всё впорядке, ошибки всё равно остались
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2018, 11:14
Ответы с готовыми решениями:

Программа вылетает через несколько секунд после запуска, Web Browser
Программа вылетает через несколько секунд после запуска. Код: void __fastcall...

Выдаёт ошибку: acos DOMAIN error,полсе нажатия окей,ещё одну ошибку pow OWERFLAW ERROR
Здравствуйте! подскажите пожалуйста где ошибка в коде. Выдаёт ошибку: acos DOMAIN error,полсе...

"Не удаётся найти указанный файл" после запуска программы
в Microsoft Visual Studio 2008 при попытке запуска программы выходит сообщение &quot;Не удаётся...

Фигуры становятся белыми через несколько секунд после запуска программы
Здравствуйте. Я написал такой код: #include &lt;Windows.h&gt; int main() { HANDLE hand =...

Разный результат запуска программы через автозагрузку и вручную
И снова здравствуйте. На последнем этапе работы возникла очередная проблема, ответ на которую я не...

5
alex white
248 / 204 / 87
Регистрация: 27.06.2016
Сообщений: 595
Завершенные тесты: 1
12.01.2018, 00:36 2
Quntgo,
C++
1
char* str_result = new char;.
Вы выделяете память под один символ.
0
Quntgo
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
14.01.2018, 03:50  [ТС] 3
alex white, конкретно этот кусок кода работает нормально(и в других проектах). Как тогда выделить под массив символов(размер не известен)?
0
alex white
248 / 204 / 87
Регистрация: 27.06.2016
Сообщений: 595
Завершенные тесты: 1
14.01.2018, 04:07 4
Quntgo, new char[размер].
Конкретно в вашем случае этот размер ограничен сверху макс. длиной путей в системе. Наверное у вас определен макрос MAX_PATH, можете использовать его.
Удаление delete [] указатель.
0
Quntgo
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
14.01.2018, 12:47  [ТС] 5
alex white, а как мне его корректно удалить,если он является возвращаемым значением?
0
alex white
248 / 204 / 87
Регистрация: 27.06.2016
Сообщений: 595
Завершенные тесты: 1
14.01.2018, 13:28 6
Quntgo, ну как бы удалять нужно если массив больше не нужен. То есть это не ответственность функции, которая его возвращает. По-хорошему, конечно, стоило бы избежать и new и delete, например, использовать std::string или std::vector. https://stackoverflow.com/questions/...ternal-buffers
Или завернуть указатель в unique_ptr.
0
14.01.2018, 13:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2018, 13:28

После запуска exe-файла выдаёт "Прекращена работа программы"
#include &lt;iostream&gt; #include &lt;cstdlib&gt; using namespace std; int main(){ cout &lt;&lt; &quot;Vvedite...

При работе программы выдаёт ошибку
Ошибка: Expression: c &gt;= -1 &amp;&amp; c &lt;= 255. Что должна делать программа?: Дана строка. Удалить...

При решении программа выдаёт значение функции, равное 0 или выдаёт ошибку. Что не так?
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;cmath&gt; using namespace std; long Fact(short...


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

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

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