Всем привет!Есть два указателя
char *a, *b;
Потом мы делаем
a = b
a = malloc(100);
strcpy(a, "lolo");
printf("%s", b);
Когда делается malloc связка между a и b теряется. И printf выводит null.Можно ли как-нибудь сделать так, чтобы связка между указателями не терялась и printf выводил "lolo"?
Заранее благодарен.
И что именно происходит, если сделать вот такЖchar *a, *b;
b = malloc(1);a = b;
a = realloc(a, 1000);
strcpy(a, ";aaa");
printf("%s", b);
> И что именно происходит, если сделать вот такЖ
> char *a, *b;
> b = malloc(1);
> a = b;
> a = realloc(a, 1000);
> strcpy(a, ";aaa");
> printf("%s", b);Сильно лучше и даже заработает, но нафига тебе realloc?
Ты уж сразу определись, чего ты хочешь. Сэкономишь realloc=malloc+memcpy+memfree. Не?
>> И что именно происходит, если сделать вот такЖ
>> char *a, *b;
>> b = malloc(1);
>> a = b;
>> a = realloc(a, 1000);
>> strcpy(a, ";aaa");
>> printf("%s", b);
> Сильно лучше и даже заработает, но нафига тебе realloc?
> Ты уж сразу определись, чего ты хочешь. Сэкономишь realloc=malloc+memcpy+memfree. Не?Насчет заработает - далеко не факт.
Если будет в текущем расположении блока достаточно места, чтобы просто его расширить, то да, заработает.
А если места будет не достаточно, то указатель переедет на другое место и ничего не заработает.
> И что именно происходит, если сделать вот такЖ
> char *a, *b;
> b = malloc(1);
> a = b;
> a = realloc(a, 1000);
> strcpy(a, ";aaa");
> printf("%s", b);Тут у тебя как повезет, реаллок может вернуть старый указатель, а может новый, но писать на авось это плохо
Используй указатель на указатель.
> Используй указатель на указатель.Вот что получилось
char **a, *b;
a = &b;
*a = malloc(100);strcpy(*a, "some string");
printf("b=%s\n", b);
printf("a=%s", *a);
Шикааааарно.Пасиб! :)
Ты бы ещё взялся др*чить вприсядку. И на*шься и напляшешься. Просто думай, куда что ты суёшь:a = malloc(100);
b = a;
strcpy(a, "lolo");
printf("%s", b);
Большое спасибо за комментарий.Ваш комментарий - идеальная иллюстрация поговорки: "Слышал звон, да не знает где он"
Хммм....
А что если вы продолжите в том же духе?
Можно попробовать сделать справочник поговорок. Только модератора нужно будет попросить вынести это в отдельную тему :)
Ты опять ничего не понял. Вместо траха с указателем на указатель, тебе нужно было перенести присвоение значения переменной на момент, когда у неё появилось значение.А не писать ерунду вроде
char *a, *b;
a = b;
когда ты присваиваешь одной неинициализированной переменной значение другой неинициализированной переменной. Про присядку ты в курсе.
Эххх....
Вы решили по кругу пройтись....
Прочитайте предыдущую поговорку. И в следующий раз, пожалуйста, имейте это в виду, чтобы какую-нибудь другую применить можно было :)Ну да ладно.
Задача как раз и стоит в том, чтобы связка не терялась ни при malloc, ни при realloc. То есть чтобы оставался линк на указатель даже после изменения области памяти, на которую он указывает.
Бедненький....
Сходите на какой-нибудь тренинг по общению с людьми...
Вместо того, чтобы просто спросить: "Я для чего это вам?", вы пишете какие-то странные вещи....
> "Я для чего это вам?"*"А для чего это вам?"
Товаришь про присядку очень даже прав. Везде прямым текстом пишут - не надо вприсядку, указатели это весьма запутанная штука и без присядки легко сломать глаза, а если вприсядку так вообще . На лодошках поди уже щитина пробилась ?
>[оверквотинг удален]
> Потом мы делаем
> a = b
> a = malloc(100);
> strcpy(a, "lolo");
> printf("%s", b);
> Когда делается malloc связка между a и b теряется. И printf выводит
> null.
> Можно ли как-нибудь сделать так, чтобы связка между указателями не терялась и
> printf выводил "lolo"?
> Заранее благодарен.Когда выполняется следующая команда:
a = malloc(100)То значение, ранее содержащееся в переменной а заменяется тем, что вернул маллок