Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.10.2012, 16:00   #1
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию Необработанное исключение

Запускаю программу, но она прерывается появлением окна, в котором написано "Необработанное исключение в "0x757d9673"

Оператор new выделяет динамическую память и ,похоже, при многократном его вызове происходит переполнение. Можно ли здесь обойтись вообще без этого оператора? Попытки сделать это привели к ошибкам компилятора. Или как использовать этот оператор, но так, чтобы не возникало переполнения?

Вот код:

Код:
#include <stdafx.h>
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string>
#include <sstream>
#include <new>

using namespace std;
      
string podstr(string x);//прототип

int main ()
{
    int x = 4824;
    int sqr;
    string sub;
    sqr = x*x;
    cout<<x<<endl;
    
loop:
	//число-->строка
	char *str = new(nothrow)char;
        itoa(sqr, str, 10);
        

        //"вырезаем" подстроку 
        sub=podstr(str);
	
        //строка-->число	
        int subch;
        subch=atoi(sub.c_str());
       
	sqr = subch*subch;
	goto loop;
        system("pause");	   
}


     string podstr(string x)
	 {
		string sub = x.substr(2,4);
                cout << "stroka " << x << endl;
                cout << "podstroka " << sub << endl;
	        return sub;
	 }

Последний раз редактировалось Faton 11; 28.10.2012 в 16:07.
Faton 11 вне форума Ответить с цитированием
Старый 28.10.2012, 16:19   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

Код:
char *str = new(nothrow)char;
ты выделяешь память под 1 символ, пишешь туда длинную строку через itoa.
потом еще пытаешься резать из строки что-то, начиная со 2 символа (выделена то память под 1 символ).

Не с исключениями борись, а с говнокодом, оно вообще работать не должно.

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

А еще, goto у тебя используется неоправданно.
rrrFer вне форума Ответить с цитированием
Старый 28.10.2012, 16:54   #3
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

Если даже указать максимальный размер длины массива, ничего не изменяется

char *str = new(nothrow)char [17];
Faton 11 вне форума Ответить с цитированием
Старый 28.10.2012, 17:10   #4
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,618
По умолчанию

дак побори утечки и все остальное что я выше написал, поясни чего ты добиваешься от этого кода...мб кто-то и поможет )
в твоей очень короткой и почти ничего не делающей podstr конструктор std::string вызывается аж 3 раза, это нормально? )
и зачем тебе std::string если ты потом пишешь: subch=atoi(sub.c_str()); ?
вместо itoa и atoi используй stringstream (sstream ты все равно подключил), оно лучше
rrrFer вне форума Ответить с цитированием
Старый 31.10.2012, 00:29   #5
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

Там оказывается просто нулевое значение получалось, поэтому и не обрабатывалось, но все равно спасибо!
Faton 11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ Error Необработанное исключение...нарушение прав доступа Alt_Shift Помощь студентам 1 24.05.2012 12:55
Жорданово исключение Александр10 C# (си шарп) 4 30.11.2011 17:00
Ошибка: Необработанное исключение типа "System.IO.FileNotFoundExceptio n" MoT9I Visual C++ 1 27.11.2011 12:31
исключение из массива. Arcueid1691 Общие вопросы C/C++ 2 24.11.2009 00:54
Исключение (Delphi) VadEr Помощь студентам 2 05.06.2009 15:29