Ф-я malloc() ?
От: Mr-Twister http://cosmozo.narod.ru/
Дата: 18.11.02 20:16
Оценка:
Здравствуйте все кого давно не видел и все кого увижу.
Читая книгу встретил программку в которой malloc() вызывается в цикле. Наткнулся у меня сразу вопрос. Получается при работе программы malloс два раза в одной и тоже области памяти места не выделяет ? Как я понял по программе она выделяет место в разных частях памяти но 2-а раза в одном и том же месте нет .
Верно я понял ?


#include <stdio.h>
#include <stdlib.h>   
#include <string.h>   
#define TSIZE 45       

struct film {
              char title[TSIZE];
              int  rating;
              struct film * next;              };

int main (void)
{
    struct film * head = NULL;
    struct film * prev, * current;
    char input[TSIZE];
    puts("Vvedite nazvanie filma :");
    while (gets(input) != NULL && input[0] != '\0')
    {
           current = (struct film *) malloc(sizeof(struct film));
           if (head == NULL)    
               head = current;
           else                                prev->next = current;
           current->next = NULL;
           strcpy(current->title, input);
           puts("Vvedite rating filma <0-10>:");
           scanf("%d", &current->rating);
           while(getchar() != '\n')
                 continue;
           puts("Vvedite nazvanie sledujushego filma\
                (pustaja stroka dlja ostanova):");
           prev = current;
    }

    if (head == NULL)
        printf("Dannie ne vvedeni. ");
    else
        printf("Spisok filmov :\n");
    current = head;
    while (current != NULL)
    {
           printf("Film : %s rating : %d\n", current->title, current->rating);
           current = current->next;
    }
    printf("Poka!\n");          return 0;

}
дас ист нихьт фантастиш, дас ист руссиш Ванюшка
Re: Ф-я malloc() ?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 18.11.02 20:22
Оценка: 1 (1)
Здравствуйте, Mr-Twister, Вы писали:

MT>Верно я понял ?


Да. Он выделяет каждый раз новую память. Соотвтественно, все выделенное надо потом освобождать.
Алексей Кирдин
Re[2]: Ф-я malloc() ?
От: Mr-Twister http://cosmozo.narod.ru/
Дата: 18.11.02 20:33
Оценка:
Здравствуйте, Kaa, Вы писали:

Kaa>Здравствуйте, Mr-Twister, Вы писали:


MT>>Верно я понял ?


Kaa>Да. Он выделяет каждый раз новую память. Соотвтественно, все выделенное надо потом освобождать.


А если после завершения программы , я запущу ее по новой, выделние может быть в том же месте , при прошлом выполнении программы , или будет опять новое выделенное место ?
дас ист нихьт фантастиш, дас ист руссиш Ванюшка
Re[3]: Ф-я malloc() ?
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 18.11.02 20:35
Оценка: 1 (1)
Здравствуйте, Mr-Twister, Вы писали:

MT>А если после завершения программы , я запущу ее по новой

Вся выделенная память помрет (будет очищена) вместе с твоей программой.
А адреса — да, адреса могут повторяться. Но данные от прошлого запуска не сохранятся
Алексей Кирдин
Re[4]: Ф-я malloc() ?
От: Andrew S Россия http://alchemy-lab.com
Дата: 18.11.02 21:54
Оценка: 1 (1)
Ну почему же, смотря как malloc сделан. Насколько я помню, он не трогает адресное пространство при выделении памяти, и, например, если ты работаешь под DOC — тогда вполне сможешь увидеть данные предыдущего запуска. Вот calloc — тот да, выделенную память забивает нулями. Да и под NT так тоже может получиться — страницы некоторое время остаются commited, так что вероятность их повторного использования при слежующем сразу запуске относительно велика.

Но, конечно, надеятся на это сколь-либо серьезно не стоит

MT>>А если после завершения программы , я запущу ее по новой

Kaa>Вся выделенная память помрет (будет очищена) вместе с твоей программой.
Kaa>А адреса — да, адреса могут повторяться. Но данные от прошлого запуска не сохранятся
http://www.rusyaz.ru/pr — стараемся писАть по-русски
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.