A.I.M. Jagged Alliance2

Добро пожаловать, Гость. Пожалуйста, выберите:
Вход || Регистрация.
27.04.2024 в 04:24:02

Главная Главная Помощь Помощь Поиск Поиск Участники Участники Вход Вход Регистрация Регистрация
A.I.M. « С++ Вопросы и ответы. »
   A.I.M.
   Генерал
   Ъ и Ь
(Модераторы: Zed, Снайпер, cha)
   С++ Вопросы и ответы.
« Предыдущая Тема | Следующая Тема »
  Тема:  С++ Вопросы и ответы.             Страниц:  1     « Открыть сокрытое! »Прочитано 49469 раз
Artem13
[13-й воин]
Прирожденный Джаец

Ап, и черти у ног моих сели...


WWW Ё-мэйл

Пол:
Репутация: +441
Re: С++ Вопросы и ответы.
« Ответ #306 от 03.09.2021 в 09:54:32 »

Ок, сенькс. Попробую.
Зарегистрирован

Artem13.gif
http://www.aap13.narod.ru
И пули, что найдет тебя,
Ты не услышишь,
А остальные мимо пролетят

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +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
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #308 от 30.06.2022 в 15:53:54 »

2Ushwood:  
тупая проверка не поможет?
 
#ifdef _WIN32
// Win
#else
// lin
#endif
Зарегистрирован

ban.gif
Zed
[SIG edition ;)]
A.I.M.Director

Была такая игра Z


Ё-мэйл

Пол:
Репутация: +532
Re: С++ Вопросы и ответы.
« Ответ #309 от 30.06.2022 в 19:10:09 »

30.06.2022 в 15:47:55, Ushwood писал(a):
Эта программа должна быть трансферабельна с винды (visual studio) на линукс и обратно.

https://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/index.htm
Зарегистрирован

Кровавый ГБист, душитель свободы.
Lion
[Lion. King Lion.]


Welcome to Metavira!




Пол:
Репутация: +362
Re: С++ Вопросы и ответы.
« Ответ #310 от 30.06.2022 в 20:32:48 »

30.06.2022 в 19:10:09, Zed писал(a):
https://www.boost.org/doc/libs/1_54_0/libs/filesystem/doc/index.htm
А ещё лучше сказать, что у нас есть С++17 и не думать про boost
 
А в общем случае Korchy прав, если очень хочется, то системнозависимый код окружают макросами. И тут систем всего-то две.
 
Offtop:
« Изменён в : 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


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #313 от 01.07.2022 в 11:58:56 »

2Korchy:  
2Zed:  
Спасибо, попробую.
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

JAggernaut
[Сын батьки Махно]
Прирожденный Джаец

Он же Махновский




Пол:
Репутация: +135
Re: С++ Вопросы и ответы.
« Ответ #314 от 07.12.2022 в 02:01:22 »


Вот прицепился!       photo_2022-12-07_01-33-58.jpg
Зарегистрирован

Мод JA2 "Солдаты Анархии": http://forum.ja2.su/cgi-bin/yabb/YaBB.pl?board=ja2v113;action=display;num=1461950373;start=0#0
Видеоканал: www.youtube.com/playlist?list=PLfiTd_jX0ZXcL5mOEXr7t3u3Mygzqbzzp

Bonarienz
[Хороший ариец]


Враг Джавдета в анимации ДжА2, Бон-а-рьен-ц!




Репутация: +346
Re: С++ Вопросы и ответы.
« Ответ #315 от 07.12.2022 в 13:35:53 »

2JAggernaut:  
 
Инкапсулированные говнокодеры...
Зарегистрирован

Deleatur (лат.) - Стереть все, совсем все!
Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #316 от 08.02.2023 в 17:31:09 »

У меня в одной из сишных программ возникла какая-то дурацкая ошибка, с которой я никогда раньше не встречался.
Программа отказывается открывать текстовый файл для записи.
Файловая переменная равна NULL, и программа вылетает.
Что я перепробовал (следы этого частично видны на скрине выше):
- менял имя файла на какое-то совершенно безобидное;
- менял путь (текущая директория, корень разных дисков; место везде есть);
- пытался открывать через fopen или через fopen_s;
- файловую переменную задавал как локальную или глобальную;
- работал в режиме debug и release;
- перезагружал Студию, делал полный ребилд проекта (знаю, иногда сама Студия глючит, тогда эти меры обычно помогают);
- позакрывал большую часть приложений, так что у меня свободно 7 гигов оперативки, а сама программа жрет 200 мегов.
Все это ничего не поменяло :(.
 
Я в тупике. Не понимаю, в чем ЕЩЕ может быть проблема.
 
ЗЫ. Visual Studio 2015.
Вот прицепился!       open_error.jpg
« Изменён в : 08.02.2023 в 17:40:59 пользователем: Ushwood » Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

Korchy
[Непреодолимая сила]
Прирожденный Джаец

Ах, было б только с кем поговорить ...


WWW Ё-мэйл

Пол:
Репутация: +663
Re: С++ Вопросы и ответы.
« Ответ #317 от 08.02.2023 в 18:49:57 »

путь абсолютным попробовать задать?
Зарегистрирован

ban.gif
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


WWW Ё-мэйл

Пол:
Репутация: +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):
Я пытаюсь понять, что могло пойти не так, из-за чего она не отработала у меня.  

Пришли расшифровку ДНК.  ;D
Зарегистрирован

- Джаец?
- Джаиц, джаиц.
- Ну, джаец, ну погоди!
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


WWW Ё-мэйл

Пол:
Репутация: +562
Re: С++ Вопросы и ответы.
« Ответ #324 от 09.02.2023 в 17:34:13 »

08.02.2023 в 20:55:05, Терапевт писал(a):
Попробуй получить информацию об ошибке с помощью функции GetLastError().
https://learn.microsoft.com/ru-ru/windows/win32/debug/retrieving-the-las....
 
То ли лыжи не едут... : rolleyes :
Вставил функцию по этой ссылке в начало программы, вставил строку
if(!GetProcessId(NULL))
   ErrorExit(TEXT("GetProcessId"));
после того самого fopen, запустил ииии... прога вылетела внутри этой самой функции.
 

Вот прицепился!       open_error2.jpg
Зарегистрирован

Мои текущие переводы:
Червь эпилог, версия 23.04.24

Ushwood
[ДжАдай]
Прирожденный Джаец

May the Force be with you


WWW Ё-мэйл

Пол:
Репутация: +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


WWW Ё-мэйл

Пол:
Репутация: +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


WWW Ё-мэйл

Пол:
Репутация: +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 (лат.) - Стереть все, совсем все!
Страниц: 1     « Открыть сокрытое! » Послать Тему Послать Тему Печатать Печатать

« Предыдущая Тема | Следующая Тема »

Статистика. Размер данных: 99500 GZip: off
A.I.M. » Powered by YaBB Modification 4 (v.4.0.0-pre)!
YaBB © 2000-2003. All Rights Reserved.