2010-11-13 10 views
0

Скажем, я выделить память для указателя на структуру:утечка памяти C++ со структурами?

CatStructure * cat; // assume a CatStructure has name and weight 

Скажем, я инициализировать кошку:

cat->name = "pippy"; 
cat->weight = 100; 

Если я сохранить ссылку на кот-> имя и кошка-> вес , мне все еще нужно сохранить ссылку на кошку? Другими словами, необходимо ли сохранить ссылку на указатель на структуру , если Я уже сохранил ссылки на ее элементы?

+0

Вы спрашиваете, можете ли вы получить указатель на 'cat' на' cat-> name' и 'cat-> weight?'. – delnan

+0

@ delnan, я так не думаю. Мне было просто любопытно, можно ли сохранить ссылку на указатель на элементы структуры, а не на фактический указатель на структуру. Думаю, Донни ответил на мой вопрос: «Нет». –

ответ

1

CatStructure *cat; не выделяет память для данной структуры, она просто дает вам место для хранения ссылки на указатель. Мы скажем, что вы это знаете, и что вы действительно правильно распределяете память.

Каждый new должен соответствовать соответствующему вызову delete или вам будет утечка памяти. Технически, если вы правильно сохраняете ссылку на одного из членов, вы можете сделать некоторую математику указателя, чтобы восстановить ссылку на структуру, но это излишне тупо. Просто сохраните указатель, чтобы позже его можно было очистить.

+0

Умная математика-указатель, чтобы не хранить правильные ссылки во время сбора мусора (если у вас есть), и, конечно же, заставить детекторов утечки много жаловаться. – SingleNegationElimination

0

Если вы удалите структуру, любые ссылки на ее указатели или элементы больше не будут действительны. те недействительные указатели/ссылки называются «оборванными».

Смежные вопросы