malloc и не-char

Модератор: Модераторы разделов

Аватара пользователя
Dudraug
Сообщения: 313
ОС: Debian lenny/sid

malloc и не-char

Сообщение Dudraug »

Продолжая изучать Си,решил изучить динамическую память.

Прочтя главу про Структуры в книге Кернигана и Ритчи. Написал примерно следущее.

Код: Выделить всё

#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>


struct d
{
 int a;
 int b;
};


int main()
{
  struct d* p;
  p = malloc(sizeof(struct d));

  p->a=2;
  p->b=32;

  printf("%i %i\n", p->a, p->b);
  free(p);
  printf("%i %i\n", p->a, p->b);




  return 0;
}


и получаю такой ответ

Код: Выделить всё

2 32
0 32


Почему??? Если мы malloc выделяем память под простой массив строк, то при втором обращении к printf строка не выводится, а тут такое.

И еще вопрос, по идее же память должна освобождаться после free (то есть помечаться как свободный(доступнык) блок) происходит ли это в моем случае?

Спасибо
P4-3.0, ASUS P5GD1, 1024MB OЗУ, GeForce 6600GT
Спасибо сказали:
Аватара пользователя
JackYF
Сообщения: 129
ОС: Debian GNU/Linux

Re: malloc и не-char

Сообщение JackYF »

Dudraug писал(а):
28.02.2008 20:48
free(p);
printf("%i %i\n", p->a, p->b);

Обращение к удалённой памяти ведёт к undefined behaviour. Так делать нельзя, может произойти что угодно. В том числе и вышенаписанное.
"В природе не существует инструмента, машины или устройства, по силе и виртуозности сравнимого с человеческой рукой."
В. Г. Бэнхэм.
---
Ваяю "нелинейный" клавиатурный тренажёр для GNU/Linux - nlkt.
Спасибо сказали:
Аватара пользователя
Dudraug
Сообщения: 313
ОС: Debian lenny/sid

Re: malloc и не-char

Сообщение Dudraug »

JackYF писал(а):
28.02.2008 21:38
Dudraug писал(а):
28.02.2008 20:48
free(p);
printf("%i %i\n", p->a, p->b);

Обращение к удалённой памяти ведёт к undefined behaviour. Так делать нельзя, может произойти что угодно. В том числе и вышенаписанное.



Я знаю что нельзя, и так делать не собираюсь. Мой пример не более чем эксперимент. И после очищения я почему то ожидал, что произойдет тоже что и со строками.

Все это я делаю что бы разобраться что же происходит. И почему.
P4-3.0, ASUS P5GD1, 1024MB OЗУ, GeForce 6600GT
Спасибо сказали:
Аватара пользователя
Alxn1
Сообщения: 402
Статус: Красноглазик со стажем
ОС: Mavericks

Re: malloc и не-char

Сообщение Alxn1 »

Вы структуру побольше размером сделайте - и тоже, что и со строками получится, думаю :) Дело тут, скорее всего, в CRT (с run-time) и том, как оно (malloc и прочее, работающее с кучей) реально выделяет память.
Спасибо сказали: