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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2010, 11:30   #1
MoroZzz45
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 14
По умолчанию Массиву класса не присваивается значения локального массива

Код:
void Kletki::CtoBin(CString x, int kk)
{
	int Bin[8]; int ou=0;
	int iterat=0;
	for(int i=450*kk;i<450*kk+450;i++)
	{
		int ascii='x[i]';
		while(ascii>0)
		{
			if((ascii%2)==0)
			{Bin[iterat]=0; ascii=ascii/2;}
			else 
			{Bin[iterat]=1; ascii=ascii/2;}
			iterat++;
		}
		if(ascii==1)
		{
			Bin[iterat]=1;
			iterat++;
		}
		for(int k=0;k<8;k++)
		{
			BinA[ou]=Bin[k];
			ou++;
		}
	}
}
Ошибка возникает на этапе BinA[ou]=Bin[k];. Теперь объясню, что есть что: BinA это массив(int) размерностью 3600. Он объявлен как прайват член класса. Массив Bin-массив локальный(int Bin[8]), объявленный в функции класса. Он заполнен 0 и 1 Приведенный выше код-функция класса, на вход - текст из эдита, и номер части(текст делится по 450 символов), которую нужно обработать.
Код:
	Kletki Obj;
	int kk=Obj.GetLen(m_Text)/450;
	for (int o=0;o<kk;o++)
	{
		Obj.CtoBin(m_Text, o);
	}
На этапе Obj.CtoBin(m_Text, o) возникает "Unhandled exeption in Kletki.exe: 0xC0000005: Access Violation."
BinA пробовал делать как паблик - не помогло.
В чем проблема, не подскажете?
MoroZzz45 вне форума Ответить с цитированием
Старый 06.06.2010, 12:09   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

пардон ошибся

Последний раз редактировалось NiCola999; 06.06.2010 в 12:13.
NiCola999 вне форума Ответить с цитированием
Старый 06.06.2010, 12:13   #3
MoroZzz45
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 14
По умолчанию

Массив Bin то получается нормальный... Вот с BinA проблемка...

Последний раз редактировалось MoroZzz45; 06.06.2010 в 12:15.
MoroZzz45 вне форума Ответить с цитированием
Старый 06.06.2010, 12:16   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
int ascii='x[i]';
так и должно быть? может все-таки без ''? потому-что проблема именно в этом, присваивание хз чего, в результате выход за диапазон int, полный коллапс всего внутри

Код:
int ascii=x[i];
если тебе нужен именно аски-код буквы, то вот так все пашет
а BinA здесь не причем, просто на каком-то моменте вычисления вот этого куска кода
Код:
while(ascii>0)
		{
			if((ascii%2)==0)
			{Bin[iterat]=0; ascii=ascii/2;}
			else 
			{Bin[iterat]=1; ascii=ascii/2;}
			iterat++;
		}
указатель &BinA[0] обнуляется, причиной всему является неправильное присвоение вот этого
Код:
int ascii='x[i]';
выход за диапазон

Последний раз редактировалось capta1n; 06.06.2010 в 12:20.
capta1n вне форума Ответить с цитированием
Старый 06.06.2010, 12:29   #5
MoroZzz45
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 14
По умолчанию

Убрал апострофы, итог - ошибка в
Код:
00000000   ???
00000001   ???
00000002   ???
00000003   ???
00000004   ???
00000005   ???
...
при выполнении Obj.CtoBin(m_Text, o);

И, может, я Вас неправильно понял, но
Цитата:
указатель &BinA[0] обнуляется, причиной всему является неправильное присвоение вот этого
в указанном Вами выше куске кода нет вообще упоминания о BinA О_о
MoroZzz45 вне форума Ответить с цитированием
Старый 06.06.2010, 13:35   #6
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

я знаю, что нет упоминания, но именно на этом этапе происходит утеря информации о массиве BinA, в отладчике явно это я заметил, когда трассировал
мое предположение, что идет неверная трансляция виртуального адреса в физический из-за предыдущей ошибки присвоения ( я о ascii='x[i]' )

еще проверь, не выходишь ли ты за рамки массива символов ( кароче не выходишь ли ты циклом за рамки диапазона строки)

Последний раз редактировалось capta1n; 06.06.2010 в 13:41.
capta1n вне форума Ответить с цитированием
Старый 06.06.2010, 14:24   #7
MoroZzz45
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 14
По умолчанию

Нет, за рамки не выхожу...
Когда в дебаггере смотрел этот цикл, увидел вот что: первая буква в тексте- "П". ascii становится равен -49 о_О. Может, у CString невозможна операция []?
ASCII код пробела берет правильно
Да и к тому же, все таки выходил за рамки Bin'а xD
Все, теперь работает, огромное спасибо!

Последний раз редактировалось MoroZzz45; 06.06.2010 в 14:41.
MoroZzz45 вне форума Ответить с цитированием
Старый 06.06.2010, 14:42   #8
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Пожалуйста
capta1n вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка массива экземпляров класса по именам Ciberal Общие вопросы C/C++ 1 18.05.2010 23:08
Не присваивается!!! prouser Общие вопросы C/C++ 3 02.05.2010 22:11
Выбор максимальноко значения с массива данных sasha_prof Microsoft Office Excel 2 02.02.2010 15:29
Вывод значения элементов массива valdemar593 Общие вопросы C/C++ 7 22.12.2009 21:37
Выбор значения из массива по столбцу и строке Almaas Помощь студентам 4 25.01.2008 14:56