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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2010, 14:50   #1
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию Не могу понять ошибку

День добрый.
Написал программку, которая должна по моему замыслу хранить строку в динамическом массиве. Причем размер массива увеличивается с каждой введенной буквой.
Однако она работает совсем не так. Помогите понять ошибку.
Код:
#include<iostream>
#include<conio.h>
using namespace std;
void main()
{

	int N=2;
	char K;
	char *st=new char[N];
	while(true)
	{
		K=getche();
		if(K=='\r')
			break;
		st[N-2]=K;
		st[N-1]='\0';
		char *temp=new char[N];
		for(int i=0;i<N;i++)
			temp[i]=st[i];
		delete[] st;
		char *st=new char[N+1];
		for(int i=0;i<N;i++)
			st[i]=temp[i];
		delete[] temp;
		N++;
	}
	cout<<"\n"<<st<<endl;
}
alex_alpha вне форума Ответить с цитированием
Старый 23.03.2010, 16:06   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Знаете, я тоже не могу понять ошибку. При входе в цикл указатель st почему-то обнуляется. Запускаю в режиме дебага.
ds.Dante вне форума Ответить с цитированием
Старый 23.03.2010, 17:29   #3
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

Цитата:
delete[] st;
char *st=new char[N+1];
for(int i=0;i<N;i++)
а зачем ты заново объявляешь указатель, ты его же перед циклом объявил!

Код:
N++;
st = new char(N);
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 23.03.2010, 18:44   #4
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Цитата:
Сообщение от RUSt88 Посмотреть сообщение
а зачем ты заново объявляешь указатель, ты его же перед циклом объявил!

Код:
N++;
st = new char(N);
потому что мне нужно, чтобы было так:
Код:
char *st=new char[N];
delete []st;
char *st=new char[N+1];
Т.е. st должен постоянно по ходу программы увеличиваться на 1.
alex_alpha вне форума Ответить с цитированием
Старый 23.03.2010, 19:02   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от alex_alpha Посмотреть сообщение
потому что мне нужно, чтобы было так:
Код:
char *st=new char[N];
delete []st;
char *st=new char[N+1];
Т.е. st должен постоянно по ходу программы увеличиваться на 1.
Это понятно, но не обязательно объявлять его заново. В данном случае даже ошибочно. Вы понимаете, что эти N байт хранятся не в st? Они хранятся где-то в памяти, а st указывает на эту память. При изменении размера памяти, не нужно заново объявлять указатель, можно просто переприсвоить ему новое значение
Код:
char* st = new char[N];
delete[] st;
st = new char[N+1];

Последний раз редактировалось netrino; 23.03.2010 в 19:26.
netrino вне форума Ответить с цитированием
Старый 23.03.2010, 19:18   #6
alex_alpha
Пользователь
 
Регистрация: 23.03.2010
Сообщений: 43
По умолчанию

Все ясно теперь. Спасибо за помощь.
alex_alpha вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу понять ошибку функции TextOut ArtiSoft Общие вопросы C/C++ 2 24.12.2009 16:29
Не могу понять ошибку. KoBRaAndrey Общие вопросы Delphi 2 18.11.2009 19:28
не могу понять Dawystrik SQL, базы данных 0 06.09.2009 19:20
Не могу понять Superlotles Помощь студентам 8 31.08.2009 20:39
При выполнении программа отображает ошибку, в чем проблема понять не могу Hyjak Помощь студентам 7 20.10.2008 23:48