Одно и то же пространство памяти выделяется снова и снова - PullRequest
6 голосов
/ 15 марта 2010

В каждой итерации цикла, переменная j объявляется снова и снова. Тогда почему его адрес остается таким же ?

  • Разве не следует каждый раз давать какой-нибудь случайный адрес?
  • Зависит ли этот компилятор?
#include<stdio.h>
#include<malloc.h>

int main()
{
    int i=3;
    while (i--)
    {
        int j;
        printf("%p\n", &j);
    }
    return 0;
}

Testrun: -

shadyabhi@shadyabhi-desktop:~/c$ gcc test.c
shadyabhi@shadyabhi-desktop:~/c$ ./a.out
0x7fffc0b8e138
0x7fffc0b8e138
0x7fffc0b8e138
shadyabhi@shadyabhi-desktop:~/c$

Ответы [ 11 ]

0 голосов
/ 15 марта 2010

Теперь вы получите серию утечек, поскольку буквы j не сохраняются для последующих бесплатных. j не обязательно получит случайный адрес, но, вероятно, просто как последовательность по сравнению с предыдущими распределениями j.

Если вы освободите j в конце цикла, вы можете получить то же поведение, что и раньше, в зависимости от реализации malloc и free.

Редактировать: вы можете перепроверить напечатанные значения с помощью этого кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...