Artem13 [13-й воин]
Прирожденный Джаец
Ап, и черти у ног моих сели...
Пол: Репутация: +441
|
|
Re: С++ Вопросы и ответы. « Ответ #306 от 03.09.2021 в 09:54:32 » |
|
Ок, сенькс. Попробую.
|
|
Зарегистрирован |
http://www.aap13.narod.ru И пули, что найдет тебя, Ты не услышишь, А остальные мимо пролетят
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #307 от 30.06.2022 в 15:47:55 » |
|
У меня возник вопрос, который в первый момент показался мне очень простым. Но как только я попытался его решить, выяснилось, что я в упор не понимаю, как. Нужно всего-то навсего написать в сишной программе кусочек, который бы проверял, есть ли директория с заданным именем, и если нет, создавал бы ее. Все элементарно. Если бы не один нюанс. Эта программа должна быть трансферабельна с винды (visual studio) на линукс и обратно. А все примеры, которыми забит гугл, работают либо только в VS, либо только в линуксе. В результате сейчас в моей программе вот такой кошмар: Code:/*if(mkdir("dat")==-1) // for Windows systems printf("Error creating dat directory\n"); else printf("Dat directory created\n"); if(mkdir("map")==-1) printf("Error creating map directory\n"); else printf("Map directory created\n"); if(mkdir("conf")==-1) printf("Error creating conf directory\n"); else printf("Conf directory created\n");*/ if(mkdir("dat",0777)==-1){ // for Linux systems printf("Error creating dat directory\n"); } else printf("Dat directory created\n"); if(mkdir("map",0777)==-1){ printf("Error creating map directory\n"); } else printf("Map directory created\n"); if(mkdir("conf",0777)==-1){ printf("Error creating conf directory\n"); } else printf("Conf directory created\n"); |
| и мне приходится вручную комментировать-раскомментировать нужные блоки всякий раз, когда я переношу прогу с одной системы на другую. И плюс еще в линуксе я каждый раз комментирую //#include <direct.h>, а в винде раскомментирую обратно...
|
« Изменён в : 30.06.2022 в 15:48:30 пользователем: Ushwood » |
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Korchy [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...
Пол: Репутация: +663
|
|
Re: С++ Вопросы и ответы. « Ответ #308 от 30.06.2022 в 15:53:54 » |
|
2Ushwood: тупая проверка не поможет? #ifdef _WIN32 // Win #else // lin #endif
|
|
Зарегистрирован |
|
|
|
Lion [Lion. King Lion.]
Welcome to Metavira!
Пол: Репутация: +362
|
|
Re: С++ Вопросы и ответы. « Ответ #310 от 30.06.2022 в 20:32:48 » |
|
30.06.2022 в 19:10:09, Zed писал(a):А ещё лучше сказать, что у нас есть С++17 и не думать про boost А в общем случае Korchy прав, если очень хочется, то системнозависимый код окружают макросами. И тут систем всего-то две. Offtop:А ещё можно выделить объявления функций в один заголовочный файл, а реализации для win и linux разнести по разным файлам и прописать для разных систем сборку разных файлов исходного кода. |
|
|
« Изменён в : 30.06.2022 в 20:54:49 пользователем: Lion » |
Зарегистрирован |
|
|
|
Zed [SIG edition ;)]
A.I.M.Director
Была такая игра Z
Пол: Репутация: +532
|
|
Re: С++ Вопросы и ответы. « Ответ #311 от 30.06.2022 в 20:58:55 » |
|
30.06.2022 в 20:32:48, Lion писал(a):А ещё лучше сказать, что у нас есть С++17 и не думать про boost |
| Этак можно сказать что у нас есть питон или *список языков с функционалом "из коробки"* и плюсы ненужны
|
|
Зарегистрирован |
Кровавый ГБист, душитель свободы.
|
|
|
Lion [Lion. King Lion.]
Welcome to Metavira!
Пол: Репутация: +362
|
|
Re: С++ Вопросы и ответы. « Ответ #312 от 30.06.2022 в 21:05:39 » |
|
2Zed: Ну зависит от задачи. Для некоторых задач проще действительно взять питон. Если выбирать между добавлением буста и апгрейдом стандарта, я бы сначала смотрел, можно ли дёшево сделать второе. А так питон, конечно, многим хорош (особенно с аннотациями типов), только медленно и памяти много идёт.
|
« Изменён в : 30.06.2022 в 21:09:25 пользователем: Lion » |
Зарегистрирован |
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #313 от 01.07.2022 в 11:58:56 » |
|
2Korchy: 2Zed: Спасибо, попробую.
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Bonarienz [Хороший ариец]
Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!
Репутация: +346
|
|
Re: С++ Вопросы и ответы. « Ответ #315 от 07.12.2022 в 13:35:53 » |
|
2JAggernaut: Инкапсулированные говнокодеры...
|
|
Зарегистрирован |
Deleatur (лат.) - Стереть все, совсем все!
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #316 от 08.02.2023 в 17:31:09 » |
|
У меня в одной из сишных программ возникла какая-то дурацкая ошибка, с которой я никогда раньше не встречался. Программа отказывается открывать текстовый файл для записи. Файловая переменная равна NULL, и программа вылетает. Что я перепробовал (следы этого частично видны на скрине выше): - менял имя файла на какое-то совершенно безобидное; - менял путь (текущая директория, корень разных дисков; место везде есть); - пытался открывать через fopen или через fopen_s; - файловую переменную задавал как локальную или глобальную; - работал в режиме debug и release; - перезагружал Студию, делал полный ребилд проекта (знаю, иногда сама Студия глючит, тогда эти меры обычно помогают); - позакрывал большую часть приложений, так что у меня свободно 7 гигов оперативки, а сама программа жрет 200 мегов. Все это ничего не поменяло . Я в тупике. Не понимаю, в чем ЕЩЕ может быть проблема. ЗЫ. Visual Studio 2015.
|
« Изменён в : 08.02.2023 в 17:40:59 пользователем: Ushwood » |
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Korchy [Непреодолимая сила]
Прирожденный Джаец
Ах, было б только с кем поговорить ...
Пол: Репутация: +663
|
|
Re: С++ Вопросы и ответы. « Ответ #317 от 08.02.2023 в 18:49:57 » |
|
путь абсолютным попробовать задать?
|
|
Зарегистрирован |
|
|
|
pipetz [пипец всему!]
Прирожденный Джаец
Я очень люблю этот Форум!
Пол: Репутация: +303
|
|
Re: С++ Вопросы и ответы. « Ответ #318 от 08.02.2023 в 19:08:05 » |
|
08.02.2023 в 18:49:57, Korchy писал(a):путь абсолютным попробовать задать? |
| Или может прав нет на запись. Запустить от имени администратора.
|
|
Зарегистрирован |
- Джаец? - Джаиц, джаиц. - Ну, джаец, ну погоди! https://github.com/egorovav/Ja2Project/releases
|
|
|
Терапевт [Человек в чёрном]
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: С++ Вопросы и ответы. « Ответ #319 от 08.02.2023 в 20:55:05 » |
|
08.02.2023 в 17:31:09, Ushwood писал(a):Файловая переменная равна NULL, и программа вылетает. |
| Это fopen возвращает NULL, что свидетельствует об ошибке. Попробуй получить информацию об ошибке с помощью функции GetLastError(). https://learn.microsoft.com/ru-ru/windows/win32/debug/retrieving-the-las...
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
pipetz [пипец всему!]
Прирожденный Джаец
Я очень люблю этот Форум!
Пол: Репутация: +303
|
|
Re: С++ Вопросы и ответы. « Ответ #320 от 08.02.2023 в 21:46:34 » |
|
У меня такая прога отработала. Разработал в блокноте, компилировал GNU gcc версии 6.3.0. 08.02.2023 в 20:55:05, автор писал(a): #include <stdio.h> int main() { output(); return 0; } void output() { FILE *out2; out2 = fopen("out.dat", "w"); fputs("Hello, World!", out2); fclose(out2); } |
|
|
« Изменён в : 08.02.2023 в 21:47:43 пользователем: pipetz » |
Зарегистрирован |
- Джаец? - Джаиц, джаиц. - Ну, джаец, ну погоди! https://github.com/egorovav/Ja2Project/releases
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #321 от 08.02.2023 в 22:43:18 » |
|
08.02.2023 в 18:49:57, Korchy писал(a):путь абсолютным попробовать задать? |
| И абсолютным (там в предыдущих строках это видно), и относительным. 08.02.2023 в 21:46:34, pipetz писал(a):У меня такая прога отработала. |
| Естественно. Она и должна была отработать. Я пытаюсь понять, что могло пойти не так, из-за чего она не отработала у меня. Естественно, кусок, который я привел, - это не вся программа. Но я понятия не имею, что в других ее местах могло привести к несрабатыванию в этом месте. 08.02.2023 в 19:08:05, pipetz писал(a):Или может прав нет на запись. |
| Есть права на запись. Собственно, эта же программа ранее (из другой функции) благополучно открыла файл на запись. 08.02.2023 в 20:55:05, Терапевт писал(a):Попробуй получить информацию об ошибке с помощью функции GetLastError(). |
| Спасибо, попробую.
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
pipetz [пипец всему!]
Прирожденный Джаец
Я очень люблю этот Форум!
Пол: Репутация: +303
|
|
Re: С++ Вопросы и ответы. « Ответ #322 от 08.02.2023 в 22:59:08 » |
|
08.02.2023 в 22:43:18, Ushwood писал(a):Я пытаюсь понять, что могло пойти не так, из-за чего она не отработала у меня. |
| Пришли расшифровку ДНК.
|
|
Зарегистрирован |
- Джаец? - Джаиц, джаиц. - Ну, джаец, ну погоди! https://github.com/egorovav/Ja2Project/releases
|
|
|
Lion [Lion. King Lion.]
Welcome to Metavira!
Пол: Репутация: +362
|
|
Re: С++ Вопросы и ответы. « Ответ #323 от 08.02.2023 в 23:20:24 » |
|
2Ushwood: Стоит попробовать получить код ошибки, как уже писал Терапевт. Кроме того может иметь смысл запускать программу не из студии. Ещё я бы проверил, что не происходит нескольких подряд попыток открыть один и тот же незакрытый файл.
|
|
Зарегистрирован |
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #324 от 09.02.2023 в 17:34:13 » |
|
08.02.2023 в 20:55:05, Терапевт писал(a):То ли лыжи не едут... Вставил функцию по этой ссылке в начало программы, вставил строку if(!GetProcessId(NULL)) ErrorExit(TEXT("GetProcessId")); после того самого fopen, запустил ииии... прога вылетела внутри этой самой функции.
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #325 от 09.02.2023 в 19:01:55 » |
|
Следующая серия. В попытке обойти проблему я убрал эту функцию вообще, открыл файл на запись в самом начале программы (и закрыл в самом конце). Прога немного поработала, потом вылетела с сообщением "Куча была повреждена". Чувствую, теперь я буду дооолго искать, где именно и что я натворил с кучей...
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Терапевт [Человек в чёрном]
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: С++ Вопросы и ответы. « Ответ #326 от 09.02.2023 в 19:03:06 » |
|
2Ushwood: Нужно было вызвать ErrorExit(TEXT("output")) после out2 = fopen("out.dat", "w"); Но чтобы не разбираться с возникшей ошибкой, напиши вызов так ... out2 = fopen("out.dat", "w"); DWORD dw = GetLastError(); ... и посмотри отладчиком, какой код будет в dw. Расшифровка кодов тут: https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes...
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Терапевт [Человек в чёрном]
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: С++ Вопросы и ответы. « Ответ #327 от 09.02.2023 в 19:34:30 » |
|
09.02.2023 в 19:01:55, Ushwood писал(a):Прога немного поработала, потом вылетела с сообщением "Куча была повреждена". |
| Похоже на результат бесконтрольного рекурсивного (сама себя) вызова какой-то функции.
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #328 от 10.02.2023 в 12:42:08 » |
|
Рекурсивных функций у меня нет. А вот динамические массивы есть, и имел место выход за границы одного из них. Дело раскрыто. Спасибо всем, кто помогал .
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Терапевт [Человек в чёрном]
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: С++ Вопросы и ответы. « Ответ #329 от 10.02.2023 в 13:03:52 » |
|
10.02.2023 в 12:42:08, Ushwood писал(a):А вот динамические массивы есть |
| Очень интересно. Только в Си нет готовых динамических массивов. Подобные штуки реализуются вручную через динамическое выделение памяти с помощью malloc().
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Bonarienz [Хороший ариец]
Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!
Репутация: +346
|
|
Re: С++ Вопросы и ответы. « Ответ #330 от 10.02.2023 в 13:07:08 » |
|
2Ushwood: Лучше быть олигофреном И пить водддку прям с утра Чем складАть олигомеры В динамический массив!.. 2Терапевт: Он же хымик, а не софтюк...
|
« Изменён в : 10.02.2023 в 13:09:31 пользователем: Bonarienz » |
Зарегистрирован |
Deleatur (лат.) - Стереть все, совсем все!
|
|
|
Терапевт [Человек в чёрном]
Народный целитель. Шарлатан высшей категории.
Пол: Репутация: +1190
|
|
Re: С++ Вопросы и ответы. « Ответ #331 от 10.02.2023 в 13:25:19 » |
|
10.02.2023 в 13:07:08, Bonarienz писал(a):Он же хымик, а не софтюк... |
| Одно другому не мешает. Я тоже профессионально никогда на Си не писал. Для меня это хобби.
|
|
Зарегистрирован |
Весна! Я уже не грею пиво! (с) В.Цой
|
|
|
Bonarienz [Хороший ариец]
Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!
Репутация: +346
|
|
Re: С++ Вопросы и ответы. « Ответ #332 от 10.02.2023 в 15:13:12 » |
|
2Терапевт: СиКуЭльщик нищасный!
|
|
Зарегистрирован |
Deleatur (лат.) - Стереть все, совсем все!
|
|
|
Ushwood [ДжАдай]
Прирожденный Джаец
May the Force be with you
Пол: Репутация: +562
|
|
Re: С++ Вопросы и ответы. « Ответ #333 от 10.02.2023 в 18:18:19 » |
|
10.02.2023 в 13:03:52, Терапевт писал(a):Подобные штуки реализуются вручную через динамическое выделение памяти с помощью malloc(). |
| Именно так и делал.
|
|
Зарегистрирован |
Мои текущие переводы: Червь эпилог, версия 23.04.24
|
|
|
Bonarienz [Хороший ариец]
Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!
Репутация: +346
|
|
Re: С++ Вопросы и ответы. « Ответ #334 от 10.02.2023 в 19:44:48 » |
|
2Ushwood: "Уж вы там добалуетесь, уж вы доизвлекаетесь!.."
|
|
Зарегистрирован |
Deleatur (лат.) - Стереть все, совсем все!
|
|
|
Zed [SIG edition ;)]
A.I.M.Director
Была такая игра Z
Пол: Репутация: +532
|
|
Re: С++ Вопросы и ответы. « Ответ #335 от 10.02.2023 в 20:48:53 » |
|
2Bonarienz: Завидуй молча.
|
|
Зарегистрирован |
Кровавый ГБист, душитель свободы.
|
|
|
Bonarienz [Хороший ариец]
Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!
Репутация: +346
|
|
Re: С++ Вопросы и ответы. « Ответ #336 от 10.02.2023 в 22:58:05 » |
|
2Zed: Товарищ Председатель! Мы не завидуем (никогда и никому!), мы неспешно грызем Яву. И фильтр, и язык (sic!)... И ужо понимаем про инкапсуляцию - ведь олигомеры - это именно она... По ЗСЭ...
|
|
Зарегистрирован |
Deleatur (лат.) - Стереть все, совсем все!
|
|
|
|