C - выделение памяти

программирование си

В общем есть функция
void func1(char *x)
{
if (!x)
x=malloc(5);
x="lold";
}

Итак, если мы вызовем ее так
char *a=NULL;
char *b="lol";
func1(a,b);
то после вызова "а" останется NULL, хотя в функции память норм выделится.
Вопрос --как выделить память из функции, если туда передали не инициализированную переменную, и чтоб она норм потом была вне функции. Просто мож я чего не догоняю%)

Примечание:
мой косяк. Ладно, теперь изменим вызов так-- func1(&a); - ситуация не изменилась

Примечание:
Кэп.О., дак в том то и дело, что я просто хочу понять как надо выделять правильно%)

Примечание:
*x=malloc(5);
*x ключевое), не знал xD
Ответы:
1. Функция func1(char *x) объявлена с одним аргументом, а ты вызываешь ее с двумя.
2. В функцию передается не х, а копия х, которая является локальной переменной и после выхода из функции конечно же теряется, даже если память была успешно выделена при помощи malloc.
3.
>x=malloc(5);
>x="lold";
выделяешь память и тут же выбрасываешь.
void func1(char **x)
{
 if (!*x)
 *x=malloc(5);
 strcpy(*x,"lold");
}


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.