Здравствуйте все кого давно не видел и все кого увижу.
Читая книгу встретил программку в которой 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", ¤t->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;
}
Здравствуйте, Mr-Twister, Вы писали:
MT>А если после завершения программы , я запущу ее по новой
Вся выделенная память помрет (будет очищена) вместе с твоей программой.
А адреса — да, адреса могут повторяться. Но данные от прошлого запуска не сохранятся
Ну почему же, смотря как malloc сделан. Насколько я помню, он не трогает адресное пространство при выделении памяти, и, например, если ты работаешь под DOC — тогда вполне сможешь увидеть данные предыдущего запуска. Вот calloc — тот да, выделенную память забивает нулями. Да и под NT так тоже может получиться — страницы некоторое время остаются commited, так что вероятность их повторного использования при слежующем сразу запуске относительно велика.
Но, конечно, надеятся на это сколь-либо серьезно не стоит
MT>>А если после завершения программы , я запущу ее по новой
Kaa>Вся выделенная память помрет (будет очищена) вместе с твоей программой.
Kaa>А адреса — да, адреса могут повторяться. Но данные от прошлого запуска не сохранятся