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

C++

Войти
Регистрация
Восстановить пароль
 
Quntgo
0 / 0 / 0
Регистрация: 04.01.2018
Сообщений: 26
#1

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

10.01.2018, 11:14. Просмотров 193. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Через раз после запуска программы выдаёт ошибку(причём разные) (C++):

Программа вылетает через несколько секунд после запуска, Web Browser - C++ Builder
Программа вылетает через несколько секунд после запуска. Код: void __fastcall TForm1::FormCreate(TObject *Sender) { ...

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

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

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

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

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

5
alex white
128 / 112 / 39
Регистрация: 27.06.2016
Сообщений: 316
Завершенные тесты: 1
12.01.2018, 00:36 #2
Quntgo,
C++
1
char* str_result = new char;.
Вы выделяете память под один символ.
0
Quntgo
0 / 0 / 0
Регистрация: 04.01.2018
Сообщений: 26
14.01.2018, 03:50  [ТС] #3
alex white, конкретно этот кусок кода работает нормально(и в других проектах). Как тогда выделить под массив символов(размер не известен)?
0
alex white
128 / 112 / 39
Регистрация: 27.06.2016
Сообщений: 316
Завершенные тесты: 1
14.01.2018, 04:07 #4
Quntgo, new char[размер].
Конкретно в вашем случае этот размер ограничен сверху макс. длиной путей в системе. Наверное у вас определен макрос MAX_PATH, можете использовать его.
Удаление delete [] указатель.
0
Quntgo
0 / 0 / 0
Регистрация: 04.01.2018
Сообщений: 26
14.01.2018, 12:47  [ТС] #5
alex white, а как мне его корректно удалить,если он является возвращаемым значением?
0
alex white
128 / 112 / 39
Регистрация: 27.06.2016
Сообщений: 316
Завершенные тесты: 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
Привет! Вот еще темы с ответами:

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

ошибка после запуска программы! - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include&lt;iostream&gt; using namespace std; int main() { int a,n,max,uzero; cin&gt;&gt;n; ...

Какой ответ получим после запуска программы - C++
. Какой ответ получим после запуска следующей программы : #include&quot;stdafx.h&quot; #include&lt;iostream&gt; usingnamespacestd; int main() ...

Какой ответ получим после запуска программы - C++
Какой ответ получим после запуска следующей программы : #include&quot;stdafx.h&quot; #include&lt;iostream&gt; usingnamespacestd; int main() {...


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

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

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