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

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

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

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

22.03.2010, 18:00. Просмотров 1095. Ответов 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);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.03.2010, 18:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему возникает переполнение стека??? (C++):

Переполнение стека - C++
Хочу полюбопытствовать. Вычитал недавно, что на стек выделяется ограниченная область памяти, и в языке Си это 4 Кб. Вопрос: Если мне...

Переполнение стека - C++
Есть функция f(): void f() { //... std::make_pair&lt;size_t, size_t&gt; pairReturner(); //... } Если пускать ее в цикле от...

Переполнение стека - C++
Всем добрый вечер. Я создаю вектор, который имеет большой размер: порядка 256000000. Этот вектор имеет тип float, т.к. функция, куда я...

Переполнение стека - C++
Привет народ. Такой вопрос: Если в общем виде: if (условие) double d else double d почему компилятор отказывается выполнять такое с...

Переполнение стека - C++
Всем привет. Помогите, пожалуйста с решением одной проблемы. Мне нужно в программе обрабатывать большие объемы текста. 10 000 000 символов....

Переполнение стека - C++
Добрый вечер! Я пытался решить следующую задачку: Петя и Вася часто играют в различные логические игры. Недавно Петя поведал Васе о...

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

Добавлено через 11 минут
Ахахахах. Только что хотел откомпилировать сообщение...хДДДД жму F9 по привычке, думаю что не отправляется хДДД Кстати не подскажите есть ли аналог процедуре Delete на подобие в С++?
0
Genius Ignat
1236 / 774 / 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
0
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(которая удвляет динамическую переменную)!
0
MrAndrey_ka
78 / 78 / 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);
я думаю что сам поймешь почему! ну а не поймешь я потом подскажу!
жду функцию с каментами
0
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 минуту
Теперь я обожаю Сииииииииииииииииии)))) хДД
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.03.2010, 19:27
Привет! Вот еще темы с ответами:

Рекурсия - переполнение стека - 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++
Помогите пожалуйста: Задали написать программу, где будет переполнение стека ( если съедает оперативной памяти больше, чем я выделил, то...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.03.2010, 19:27
Ответ Создать тему
Опции темы

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