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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2010, 04:11   #1
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию Размер массива не меняется (malloc, C++ )

Здравствуйте, не могу разобраться в чем недочет, размер массива постоянно равняется 4, вот код:

Код:
	char *String = "RIO ! ! !";
	char *S = NULL;
	S = (char *)malloc(sizeof(char) * strlen(String));
	for (I = 0; I < sizeof(S) - 1; I++)
	{
		 S[I] = String[I];
		 printf("Element - %c\n", S[I]);
	}
	delete[] S;
В чем собственно проблема?
RIO вне форума Ответить с цитированием
Старый 26.11.2010, 07:40   #2
Sam Gold
Форумчанин
 
Аватар для Sam Gold
 
Регистрация: 26.03.2010
Сообщений: 538
По умолчанию

Дело в том, что
Код:
sizeof(S)=sizeof(char *)=4 байта
Память выделяется под всю строку S, а считываются только первые 4 символа. А вам в цикле видимо надо до strlen(S)
P.S И если уж выделили память malloc'ом то освобождать ее лучше
Код:
free(S)
Единственный способ стать умнее - играть с более умным противником.

Последний раз редактировалось Sam Gold; 26.11.2010 в 07:49.
Sam Gold вне форума Ответить с цитированием
Старый 26.11.2010, 07:55   #3
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от Sam Gold Посмотреть сообщение
P.S И если уж выделили память malloc'ом то освобождать ее лучше
Код:
free(S)
Если это C++, то лучше не выделять память malloc`ом()
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 26.11.2010, 08:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for (I = 0; I < sizeof(S) - 1; I++)
У тебя S - указатель. А его размер 4 байта. Я бы не делал такую проверку. Лучше завести еще одну переменку - размера
Код:
	char *String = "RIO ! ! !";
	char *S = NULL;
        int n=strlen(String);
	S = (char *)malloc(sizeof(char) * n);
	for (I = 0; I < n; I++)
	{
		 S[I] = String[I];
		 printf("Element - %c\n", S[I]);
	}
	delete[] S;
И кстати Blade'а послушай - верно глаголит.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.11.2010, 19:23   #5
RIO
Форумчанин
 
Аватар для RIO
 
Регистрация: 15.12.2007
Сообщений: 422
По умолчанию

Спасибо всем Я как раз и думал использовать еще одну переменную. Но никак не мог понять, почему программа на sizeof() не реагирует, теперь разобрался. Спасибо вам.

PS: может кому-то пригодиться - для статических массивов можно использовать sizeof() что бы узнать его длину, а для динамических нет, в случае использования будет возвращаться размер указателя

Кстати, а почему не рекомендуется использовать malloc ?
RIO вне форума Ответить с цитированием
Старый 01.12.2010, 03:39   #6
ISergeyN
Maniac
Форумчанин
 
Аватар для ISergeyN
 
Регистрация: 03.01.2009
Сообщений: 450
По умолчанию

Цитата:
Кстати, а почему не рекомендуется использовать malloc ?
В С нормально.. в С++ будут проблемы с конструкторами классов..
Стандартные библиотеки разработаны с учетом многолетнего опыта лучших программистов и они не больны "детскими болезнями крутизны в программизме"....
ISergeyN вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Меняется размер нижнего бордюра окна Altera Общие вопросы .NET 2 25.09.2010 19:50
ограничения на размер массива? LOST94 Общие вопросы C/C++ 4 29.03.2010 09:50
Размер массива huzik Общие вопросы C/C++ 10 15.10.2009 18:15
размер массива nosuchathing Общие вопросы C/C++ 6 15.01.2009 11:40
Размер массива в Delphi simple_Pro Помощь студентам 2 11.05.2008 09:15