где находится поле структуры, созданное новым (куча или стек)? - PullRequest
3 голосов
/ 30 ноября 2011

я читал о стеке и куче, но я не знаю об этом

где х (в куче или в стеке)?мой код имеет утечку памяти или нет?

struct st
{
    int x;
    int* y;
};

st* stp;

void func()
{
    st* s=new st();

    s->x=2;
    s->y=new int(5);

    stp=s;
}

int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{

    func();

    cout << stp->x << "  " << *stp->y <<endl;

    delete stp->y;
    delete stp;
}

вывод 2 5

Ответы [ 3 ]

4 голосов
/ 30 ноября 2011

stp выделяется динамически и поэтому находится в куче. * Следовательно, все его элементы (включая x) находятся в куче.

Насколько я вижу, у вас нет утечки памяти.


* Технически, стандарт C ++ не говорит о стеке или куче, так что дело за компилятором, где все распределяется. Но на практике он будет храниться в виде кучи.
0 голосов
/ 30 ноября 2011

при использовании new или malloc() память обычно выделяется из heap.Когда вы выделяете объект внутри функции, он переходит на stack.

, поэтому, поскольку вы используете new st(), x в структуре выделяется в куче.и нет, утечки памяти здесь не обнаружено!

0 голосов
/ 30 ноября 2011

Динамически размещенные переменные (например, ваш stp) обычно хранятся в куче (если только вы не вызываете специальную функцию выделения, которая работает в стеке, как alloca). Я не вижу утечки памяти.

...