<!--QuoteBegin--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>
QUOTE </td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->Пишу я к примеру
char *myvar = "sdfsdf";
Очевидно, выделяется 7 байт памяти. Не должен ли я их освобождать самостоятельно? Т.е. понятно, что когда я пишу
char myvar[255] = "sdfsd";
То все ок., т.к. данные размещаются в памяти статически. А вот в случае динамического размещения?
Или еще пример:
- Код: выделить все
char *var1, *var2;
var1 = "sdfsdfd"; //выделилась память. надо ли освобождать?
var1 = var2; //var1 просто указывет туда же, куда var2
var1 = "ggggg"; //теперь содержимое var2 тоже равно ""ggggg"
Все ли я понимаю правильно?
Вообще работа с указателями как-то неочевидна. Как я могу различить, когда я присваиваю значение указателю, а когда - тому на что он указывает?
Скажем, у меня есть
int *v;
я хочу выделить под него память. как это сделать? и как ее потом освободить?
допустим, я сделал это. Хочу изменить то значение на которое указывает v. Я пишу:
v = 0xFFFFFF;
А теперь я хочу сделать так, чтобы v указывал на участок памяти по адресу 0xFFFFFF. Как это сделать?
Вопрос next. Некоторая функция возвращает мне строку, под которую она очевидно распределила память. Как мне освободить эту памть?
Спасибо за внимание <!--emo&:)-->
<!--endemo--><!--QuoteEnd--></td></tr></table><span class='postcolor'><!--QuoteEEnd-->
- Код: выделить все
char *var1, *var2; // определил два указателя
var1 = "sdfsdfd"; //Первый указатель теперь указывает на память
// где сидит текстовая константа. Никакой памяти не
// выделялось и нечего не надо освобождать.
var1 = var2; //var1 просто указывет туда же, куда var2 (то есть
// неизвестно куда так как var2 не был определен
// Или на NULL если var1 и var2 статические.
var1 = "ggggg"; // var2 по-прежнему не определен или NULL
Хочешь выделить память используй new, malloc()/calloc(), или strdup(). Тогда её надо будет освободить при помощи delete или free().
int *v;
v=0xFFFF - v теперь указывает на память по адресу 0xFFFF;
*v = 0xFFF - теперь мы поменяли значение в ячейке памяти по адресу, записанному в v.
Ты все время путаешь указатели и ссылки. Это разные вещи. Короче - учить мат. часть. С самого начала. Возми любую книжку по C++ (даже типа C++ за 10 дней или что-нибудь подобное) и усвой основные концепции - они сильно отличаются от тех языков к которым мне кажется ты привык.