Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка выделения памяти / 10 сообщений из 10, страница 1 из 1
18.05.2014, 18:55
    #38644568
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
Имеется фрагмент кода (деление строки на массив строк):
Код: plaintext
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.
	int StrPos=0;
	int StrNum=0;
	int StrPrevBegin=0;
	tmpSubStr=new wchar_t*[Len];//Len ранее посчитан и равен количеству L'\n'
//////Тест какой то хрени с выдедением памяти
//	for(int i=0;i<Len;i++)
	{
//		tmpSubStr[i]=new wchar_t[10]; - этот вариант выделения работает корректно
	}
//////Окончание теста какой то хрени с выдедением памяти
	//делим на строки
	bool NeedExit=false;
	do
	{
		if((tmpstr[StrPos]==L'\n')||(tmpstr[StrPos]==L'\0'))
		{
			tmpSubStr[StrNum]=new wchar_t[StrPos-StrPrevBegin+2];
			wcsncpy(tmpSubStr[StrNum],(tmpstr+StrPrevBegin),StrPos-StrPrevBegin);
			tmpSubStr[StrNum][StrPos-StrPrevBegin]=L'\0';
			StrPrevBegin=StrPos+1;
			if((StrPos>0)&&(tmpstr[StrPos-1]!=L'\n'))//проверка на пустую строку
			{
				StrNum++;
			}
			if(tmpstr[StrPos]==L'\0')NeedExit=true;
		}
		StrPos++;
	}while(!NeedExit);


Проверяю на моменте "tmpSubStr[StrNum]=new wchar_t[StrPos-StrPrevBegin+2];": смотрю адреса tmpSubStr[0], tmpSubStr[1], tmpSubStr[2], tmpSubStr[3], tmpSubStr[4].
Записался адрес tmpSubStr[0] - норм
Записался адрес tmpSubStr[1] - вроде тоже норм
Записался адрес tmpSubStr[2] - совпадает с tmpSubStr[1] WTF???
Записался адрес tmpSubStr[1] - тоже совпадает с tmpSubStr[1] WTF???
Дальше всё норм.
Подскажите плз, где я туплю?
...
Рейтинг: 0 / 0
18.05.2014, 19:15
    #38644591
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
TAIPHOONгде я туплю?
Да я бы сказал - везде. Ты путаешь сравнение строк со сравнением указателей на строки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.05.2014, 19:40
    #38644606
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
Это где я сравниваю строку с указателем?
Я смотрю на адреса tmpSubStr[0] ... tmpSubStr[3]
*В строке "Записался адрес tmpSubStr[1] - тоже совпадает с tmpSubStr[1] WTF???" опечатка - подразумевался указатель на tmpSubStr[3]
...
Рейтинг: 0 / 0
18.05.2014, 19:59
    #38644620
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
Дополнение:
Если количество выделяемой памяти указать константой, а не "StrPos-StrPrevBegin+2", то всё работает нормально.
Что не так в вычисляемом значении?
...
Рейтинг: 0 / 0
18.05.2014, 20:14
    #38644626
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
TAIPHOON,

по-человечески цикл напиши.
как минимум утечки памяти наблюдаю, под лишний символ память выделяется
ознакомься с break и continue
...
Рейтинг: 0 / 0
18.05.2014, 20:26
    #38644632
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
Изопропилпо-человечески цикл напиши.
как минимум утечки памяти наблюдаю, под лишний символ память выделяется
ознакомься с break и continue
Спс. Лишний символ - остатки:(. Изначально по другому писал. Утечки ещё где то?
break я знаю, но не очень люблю. Как то столкнулся с тем, что на разных компиляторах он по разному себя повёл. После того стараюсь использовать флаг выхода.
"continue" - есть такое, но ту то для чего?
...
Рейтинг: 0 / 0
18.05.2014, 20:26
    #38644633
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
TAIPHOONЭто где я сравниваю строку с указателем?
А, пардон, это я спутал tmpstr и tmpSubStr.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
18.05.2014, 20:28
    #38644634
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
TAIPHOON. Утечки ещё где то?
на пустой строке. если строка пустая - память выделять не надо

ЗЫ код нечитаем совершенно что и приводит к ошибкам
...
Рейтинг: 0 / 0
18.05.2014, 20:37
    #38644637
TAIPHOON
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
ИзопропилTAIPHOON. Утечки ещё где то?
на пустой строке. если строка пустая - память выделять не надо

ЗЫ код нечитаем совершенно что и приводит к ошибкам
За пустую строку спс - исправлю.
"код нечитаем" - имеется ввиду именование или форматирование?
Я последний раз более менее нормально писал лет 7 назад, после того иногда "для себя чуток". Совершенно всё позабыл:(.
ЗЫ
Самое интересное, что когда изменил "StrPos-StrPrevBegin+2" на "StrPos-StrPrevBegin+1" глюк пропал. Я в шоке.
...
Рейтинг: 0 / 0
18.05.2014, 20:56
    #38644644
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка выделения памяти
TAIPHOON"код нечитаем" - имеется ввиду именование или форматирование?
структура управления, многократное вычисление StrPos-StrPrevBegin
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка выделения памяти / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]