Динамическое выделение памяти (Си)
|
|
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 кб. Диспетчер задач тебе и не покажет изменение.
|
|
| |
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 |
был не раз
Сейчас нет на сайте
| Всем спасибо - разобрался. Не подскажите хорошую программу для просмотра изменения в памяти? Чтобы в ней не в Кб измерялось, а в битах или байтах.
|
|
| |