Пятница, 08 Ноября 2024, 13:38

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Динамическое выделение памяти (Си)
NednameДата: Четверг, 19 Февраля 2015, 20:17 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте! Никак не разберусь с динамическим выделение памяти в Си.

Код

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

int main() {
   
  int number = 10;
  int *ptr = malloc( sizeof(*ptr) );

  printf("%d\n", *ptr );
      
         getch(); // ждем нажатия клавиши...
      
  free(ptr); //... и очищаем память

  getch();
  return 0;
}

Но дело в том, что это не работает. В диспетчере задач до нажатия клавиши main.exe 788кб столько же и после нажатия. В чем дело?
XakepДата: Четверг, 19 Февраля 2015, 20:39 | Сообщение # 2
めちゃくちゃちゃ
Сейчас нет на сайте
Вообще не понятно, что ты хочешь сделать? твой код не понятен вообще ) sizeof (*ptr) - это тоже странновато у тебя даже не выделено ничего на этот момент, он может вообще вернуть 0, т.у. ты просто не выделишь памяти, наверное нужно как-то так писать: sizeof (int)*n где n количество элементов в массиве. ну и не правильно так делать, нужно так:
Код

int *ptr = (int*) malloc (sizeof (int)*n);


я так понял ты хочешь в динамически выделенную память поместить число number, тогда нужно сделать так:
Код

int number = 10;  
int *ptr = (int*) malloc (sizeof (int));
*ptr = number;
printf ("%d\n", *ptr);
NednameДата: Четверг, 19 Февраля 2015, 21:20 | Сообщение # 3
был не раз
Сейчас нет на сайте
А как потом очистить память от number?
RangerДата: Пятница, 20 Февраля 2015, 04:16 | Сообщение # 4
почти ветеран
Сейчас нет на сайте
Цитата Nedname ()
А как потом очистить память от number?

number в стеке, а не в куче.
она free не очищается.
Цитата Nedname ()
788кб столько же и после нажатия. В чем дело?

sizeof(*ptr) это 4 байта ( или 2 смотря, где делаешь) 788кб - 4байта ~ 788 кб. Диспетчер задач biggrin тебе и не покажет изменение.


NednameДата: Воскресенье, 22 Февраля 2015, 15:57 | Сообщение # 5
был не раз
Сейчас нет на сайте
Цитата Ranger ()
number в стеке, а не в куче.

Как перевести number в кучу, а затем удалить?
XakepДата: Воскресенье, 22 Февраля 2015, 16:24 | Сообщение # 6
めちゃくちゃちゃ
Сейчас нет на сайте
Цитата Nedname ()
Как перевести number в кучу, а затем удалить?

зачем?
у тебя ptr в куче так-то, удалить его free, можешь просто выделить под ptr память в куче и записать без number:
*ptr = 10;
OpenGOOДата: Воскресенье, 22 Февраля 2015, 16:28 | Сообщение # 7
почти ветеран
Сейчас нет на сайте
Код
int *number  = (int*) malloc (sizeof (int));
*number  = 10;
free(number);


Мои проекты:
- Свободный и открытый клон World Of Goo
- TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC)

[GameMaker: Studio v1.4.9999]
NednameДата: Среда, 25 Февраля 2015, 17:08 | Сообщение # 8
был не раз
Сейчас нет на сайте
Всем спасибо - разобрался. Не подскажите хорошую программу для просмотра изменения в памяти? Чтобы в ней не в Кб измерялось, а в битах или байтах.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг