Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
#1

Почему возникает переполнение стека??? - C++

22.03.2010, 18:00. Просмотров 1060. Ответов 8
Метки нет (Все метки)

У меня есть программа которая выводит все возможные перестановки заданного слова(числа) в данном случае числа 123, но почему то возникает переполнение стека. Помогите разобраться.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "conio.h"
#include "cstring.h"
#include "string.h"
#include "iostream.h"
#include "windows.h"
//---------------------------------------------------------------------------
 
 
 
#pragma argsused
 
int Perest(string C, string S);
int main(int argc, char* argv[])
{
 string s="123",s1="";
 Perest(s1,s);
 getch();
 return(0);
}
//---------------------------------------------------------------------------
 
int Perest(string C, string S)
{
        string Temp, Temp2, Cons, Res;
        int Sch;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        printf("%s ",Res);
                }
        else
           for(i=1; i<len;i++)
                {
                        Temp=S;
                        Temp2=Temp.substr(i,1);
                        Cons=C+S[i];
                        Perest(Cons,Temp);
                }
 
 
        return(Sch);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2010, 18:00     Почему возникает переполнение стека???
Посмотрите здесь:

Реализовать переполнение стека - C++
Помогите пожалуйста: Задали написать программу, где будет переполнение стека ( если съедает оперативной памяти больше, чем я выделил, то...

Рекурсия - переполнение стека - C++
Помогите написать,задание ниже#include &quot;stdafx.h&quot; #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; ...

Диалоговое окно, переполнение стека - C++
У меня создается диалоговое окно (через ресурсы и DialogBox). Я к нему леплю ф-ию обработки сообщений. Все норм. Но стоит дописать в конце...

Быстрая сортировка. Переполнение стека - C++
Написал программу быстрой сортировки происходит переполнение стека, при большом количестве значений. Кто чем может помочь исправить эту...

Переполнение стека из-за передачи струтуры - C++
у меня происходит переполнение стека из-за передачи большой структуры. и не только из-за структуры пытался передать большую строку тоже...

Переполнение стека при вычислении выражения - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; double eps=0.001; void main() { double x; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
oxotnik
1586 / 1063 / 33
Регистрация: 21.08.2008
Сообщений: 4,545
Записей в блоге: 1
22.03.2010, 18:01     Почему возникает переполнение стека??? #2
зацикливается в рекурсии
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:04  [ТС]     Почему возникает переполнение стека??? #3
Цитата Сообщение от oxotnik Посмотреть сообщение
зацикливается в рекурсии
Ну это ясное дело....что убрать или что добавить чтобы работало?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 18:08     Почему возникает переполнение стека??? #4
Как то не пом не в рекурсию ещё и цикл:
А для решения: поставь return 0; где нибудь до рекурсивного вызова.
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:30  [ТС]     Почему возникает переполнение стека??? #5
Цитата Сообщение от Genius Ignat Посмотреть сообщение
Как то не пом не в рекурсию ещё и цикл:
А для решения: поставь return 0; где нибудь до рекурсивного вызова.
а где именно поподробнее можно?

Добавлено через 11 минут
Ахахахах. Только что хотел откомпилировать сообщение...хДДДД жму F9 по привычке, думаю что не отправляется хДДД Кстати не подскажите есть ли аналог процедуре Delete на подобие в С++?
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
22.03.2010, 18:32     Почему возникает переполнение стека??? #6
C++
1
2
3
i
nt * a =(int*)malloc(sizeof(int));       //аналог new
free(a);                                         //аналог delete
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 18:57  [ТС]     Почему возникает переполнение стека??? #7
Цитата Сообщение от Genius Ignat Посмотреть сообщение
C++
1
2
3
i
nt * a =(int*)malloc(sizeof(int));       //аналог new
free(a);                                         //аналог delete
Вообщето я имел ввиду процедуру Delete(выделения подстроки из строки) а не dispose(которая удвляет динамическую переменную)!
MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
22.03.2010, 19:01     Почему возникает переполнение стека??? #8
прокоментируй в функции каждую строчку:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int Perest(string C, string S)
{
        string Temp, Temp2, Cons, Res;
        int Sch;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        printf("%s ",Res);
                }
        else
           for(i=1; i<len;i++)
                {
                        Temp=S;
                        Temp2=Temp.substr(i,1);
                        Cons=C+S[i];
                        Perest(Cons,Temp);
                }
 
 
        return(Sch);
я думаю что сам поймешь почему! ну а не поймешь я потом подскажу!
жду функцию с каментами
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2010, 19:27     Почему возникает переполнение стека???
Еще ссылки по теме:

Переполнение стека во время освобождения памяти - C++
Здравствуйте! СТолкнулся с такой проблемой, что при работе деструктора программа аварийно завершается, а в дебаггере появляется сообщение о...

Как можно сделать переполнение стека - C++
Всем привет, ребята, есть у меня код с микрософта, как переполнить стек. Но беда, не понимаю кое что, напишу в комментариях. void...

Переполнение стека и несовместимая компоновка dll - C++
Добрый день. Сегодня сижу и целый день что то пишу) Так как до этого просто страдал фигнёй и ни чего не делал, вот и забыл почти всё( ...

Ошибка этапа исполнения - переполнение стека - C++
Помогите пожалуйста C++ написала программу она правильно работает, но при каждом запуске она выкидывает окно переполнение стека...


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

Или воспользуйтесь поиском по форуму:
Repak5
2 / 2 / 1
Регистрация: 18.10.2009
Сообщений: 14
22.03.2010, 19:27  [ТС]     Почему возникает переполнение стека??? #9
Разобрался ехуууууу вот если кому нужен полностью рабочая программа. Выводит все возможные перестановки чисел(букв) и возвращает их количество.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//---------------------------------------------------------------------------
 
#pragma hdrstop
#include "stdio.h"
#include "conio.h"
#include "cstring.h"
#include "string.h"
#include "iostream.h"
#include "windows.h"
//---------------------------------------------------------------------------
 
 
 
#pragma argsused
 
int Perest(string C, string S);
int main(int argc, char* argv[])
{
 string s="123",s1="";
 Perest(s1,s);
 getch();
 return(0);
}
//---------------------------------------------------------------------------
 
int Perest(string C, string S)
{
        string Temp, Temp2, Temp3, Cons, Res;
        int Sch;
        char buf;
        int i,len,len1;
        len=S.length();
        if (len==0)
                {
                        Res=C+S;
                        Sch+=1;
                        std::cout<<Res<<endl;
                        return 0;
                }
        else
           for(i=0; i<len;i++)
                {
                        Temp=S;
                        Temp2=S;
                        Temp3=Temp.substr(0,i);
                        Temp3=Temp3+Temp2.substr(i+1,Temp2.length());
                        Cons=C+S[i];
                        Perest(Cons,Temp3);
 
                }
 
 
        return(Sch);
}
 
 
Ла ла ла
Добавлено через 1 минуту
Теперь я обожаю Сииииииииииииииииии)))) хДД
Yandex
Объявления
22.03.2010, 19:27     Почему возникает переполнение стека???
Ответ Создать тему
Опции темы

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