Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
#1

Повторный запуск main() равен перезапуску программы? - C++

30.04.2014, 15:22. Просмотров 3531. Ответов 18
Метки нет (Все метки)

Добрый день. Если в коде какой либо функции я вызову main() c которой у меня начинается выполнение программы, то будет ли это равно перезапуску программы(освобождение всей используемой до этого памяти и т.д) и если нет, то каким образом в коде можно прописать, чтобы программа запустилась заново? С освобождением все занятой до этого памяти и уничтожением всех созданных объектов? Среда разработки VS2012
http://www.cyberforum.ru/cpp-beginners/thread1327692.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.04.2014, 15:22
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Повторный запуск main() равен перезапуску программы? (C++):

повторный прогон программы
Подскажите, пожалуйста, как сделать повторный прогон алгоритмов без запуска...

Запуск программы без создания окна. Запуск фоновой программы
Вопрос, как сделать, чтобы консольное приложение при запуске не создавало...

Организовать диалог на повторный запукск программы
Я сделал программу,и мне нужно с помощью ФУНКЦИЙ сделать диалог с пользователем...

Повторный ввод без завершения программы
консольное приложение. как сделать так, чтобы при вводе неверных данных в...

Повторный ввод данных без выхода из программы
Здравствуйте! Вот фрагмент кода: while(w1 != 1, w1 != -1){ // веса w1...

18
Ilot
Эксперт С++
1826 / 1184 / 342
Регистрация: 16.05.2013
Сообщений: 3,119
Записей в блоге: 5
Завершенные тесты: 1
30.04.2014, 15:26 #2
Должно быть вам следует смотреть в сторону потоков.
http://www.cplusplus.com/reference/thread/thread/
0
TenGen
Будущее рядом
99 / 97 / 48
Регистрация: 06.03.2014
Сообщений: 342
30.04.2014, 15:27 #3
CyberGenius,
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int i = 4;
 
int main()
{
    if ((--i) != 0)
    {
        printf("%i\n", i);
        main();
    }
    return 0;
}
Развлекайтесь
имхо, вам можно просто вызывать из консоли вашу же программу, после чего завершать работу. Но могу ошибаться
либо заведите функцию обнуления всех переменных и в том же экземпляре программы сбрасывайте все значения на стартовые
1
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
30.04.2014, 15:35 #4
Цитата Сообщение от CyberGenius Посмотреть сообщение
Если в коде какой либо функции я вызову main()
3.6 Start and termination
3.6.1 Main function
...
3
The function main shall not be used within a program. The linkage (3.5) of main is implementation-defined. A program that defines main as deleted or that declares main to be inline, static, or constexpr is ill-formed. The name main is not otherwise reserved. [ Example: member functions, classes, and enumerations can be called main, as can entities in other namespaces. — end example ]
так что не надо
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 15:57  [ТС] #5
Вообщем, поступил так:
C++
1
2
3
4
void _Restart(){
    WinExec("D:\\MP0002.exe", SW_SHOWMINIMIZED);
    exit(1);
}
0
Croessmah
++Ͻ
14147 / 8072 / 1512
Регистрация: 27.09.2012
Сообщений: 19,910
Записей в блоге: 3
Завершенные тесты: 1
30.04.2014, 16:04 #6
Цитата Сообщение от CyberGenius Посмотреть сообщение
exit(1);
уберите эту ересь.
Просто для примера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstdlib>
 
struct TEST
{
   TEST () {
      std::cout << "TEST()" << std::endl ;
   }
   ~TEST () {
      std::cout << "~TEST()" << std::endl ;
   }
} ;
 
int foo ()
{
   exit ( 0 ) ;
}
 
int main ()
{
   TEST t ;
   foo();
}
http://ideone.com/aEAqiB
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 16:07  [ТС] #7
Croessmah, а как тогда лучше поступить?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.04.2014, 16:53 #8
Цитата Сообщение от CyberGenius Посмотреть сообщение
а как тогда лучше поступить?
а что вам надо?
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 16:56  [ТС] #9
Мне нужно завершить программу и запустить её заново.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
30.04.2014, 17:12 #10
Цитата Сообщение от CyberGenius Посмотреть сообщение
Мне нужно завершить программу и запустить её заново.
Для этого должна быть другая программа-менеджер. Не стоит заниматься самозапуском/самозавершением.
С чего вообще возникла необходимость периодического запуска/завершения программы? Может достаточно функции (в новом потоке)?
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 17:23  [ТС] #11
Я работаю с библиотекой OpenCV и время от времени она перестает работать как надо, проблема скорей всего с утечками памяти или еще чем то, проблему пока найти не могу. Перезапуск программы решает проблему и является приемлемым решение проблемы на данном этапе.
0
Tulosba
:)
Эксперт С++
4746 / 3240 / 496
Регистрация: 19.02.2013
Сообщений: 9,046
30.04.2014, 17:54 #12
Цитата Сообщение от CyberGenius Посмотреть сообщение
проблему пока найти не могу
Создайте тему, я думаю, вам помогут. Это лучше, чем искать обходные маневры в виде периодического перезапуска.
Цитата Сообщение от CyberGenius Посмотреть сообщение
является приемлемым решение проблемы на данном этапе
Вы же понимаете, что это в любом случае временное решение. И как я уже писал ранее, в таком случае следует создать новую программу, которая будет управлять запуском/перезапуском.
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 18:04  [ТС] #13
Цитата Сообщение от Tulosba Посмотреть сообщение
И как я уже писал ранее, в таком случае следует создать новую программу, которая будет управлять запуском/перезапуском.
А чем конкретно плохо такое решение проблемы?
C++
1
2
3
4
void _Restart(){
    WinExec("D:\\MP0002.exe", SW_SHOWMINIMIZED);
    exit(0);
}
Обрисую ситуацию, у меня в программе стоит проверка, я знаю наверняка, что в сейчас программа должна получить определенное значение, если она его не получает я понимаю, что возникла проблема и перезапускаю программу.
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
30.04.2014, 18:21 #14
У меня в машине сдуло колесо, я знаю, что это колесо, но я покупаю новую машину.
0
TenGen
Будущее рядом
99 / 97 / 48
Регистрация: 06.03.2014
Сообщений: 342
30.04.2014, 18:22 #15
CyberGenius, потому что лучше от ошибки избавиться, а не избавляться от последствий
0
CyberGenius
1 / 1 / 1
Регистрация: 23.08.2012
Сообщений: 100
30.04.2014, 18:26  [ТС] #16
Цитата Сообщение от TenGen Посмотреть сообщение
CyberGenius, потому что лучше от ошибки избавиться, а не избавляться от последствий
Это без сомнений, проблему нужно решать. Но как костыль этот вариант не самый ужасный? И рабочий ли?
0
stima
495 / 345 / 93
Регистрация: 22.03.2011
Сообщений: 1,107
Завершенные тесты: 2
30.04.2014, 18:28 #17
Это уже не кастыль, а инвалидная коляска. (c)
1
Qazan
213 / 61 / 25
Регистрация: 30.04.2013
Сообщений: 838
Записей в блоге: 10
30.04.2014, 18:42 #18
Может создать .bat файл с инструкциями по дальнейшими действиям
(Убить наш процесс и запустить заново) и запустить его

Проге самой создать файл ,а потом bat самоудалить
0
TenGen
Будущее рядом
99 / 97 / 48
Регистрация: 06.03.2014
Сообщений: 342
30.04.2014, 19:58 #19
CyberGenius, все таки, имхо, лучше либо проблему поправить, либо хотя бы чистить память без завершения приложения. Вы же динамической памятью пользуетесь?
0
30.04.2014, 19:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 19:58
Привет! Вот еще темы с решениями:

Запуск ассемблерного кода на выполнение из main()
Добрый день. Подскажите, если есть готовый файл на ассемблерном коде, то как...

Написать int main() для программы
Здравствуйте, есть код класса дерева и массива для кнопок. помогите написать...

Переписать main программы чтения текстовых строк
Переписать main программы чтения текстовых строк и печати самой длиной из них...

Функция main. Является ли она точкой старта программы?
Собственно, вопрос уже поднят.. Желательно аргументировать хоть как-то свой...


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

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

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