Я читаю K & R указатели в разделе 5.4, где выполнены стеки malloc()
и free()
. Я использую gdb для отладки кода, а часть alloc()
работает должным образом. Но для части afree()
указатели все еще указывают на то же место, что и раньше. Вот код:C: Выполнение стека malloc и бесплатно
#include <stdio.h>
#define ALLOCSIZE 10000
static char allocbuf[ALLOCSIZE];
static char* allocp = allocbuf;
char* alloc(int n)
{
if(allocbuf + ALLOCSIZE - allocp >= n)
{
allocp += n;
return (allocp - n);
}
else
return 0;
}
void afree(char* p)
{
if(p >= allocbuf && p < allocbuf + ALLOCSIZE)
allocp = p;
}
int main()
{
char* a = alloc(10);
a = "ayushnair";
char*b = alloc(5);
b = "snea";
printf("%p %p\n", a, b);
afree(b);
afree(a);
printf("%p %p\n", a, b);
return 0;
}
Новое распределение
allocp 0x601080
после char* a = alloc(10);
allocp 0x60108a
после char* b = alloc(5);
allocp 0x60108f
после afree(b);
allocp 0x60108f
после afree(a);
allocp 0x60108f
allocp
все еще указывает на 0x60108f
. Почему он не обновляется в соответствии с кодом?
'return (alloc - n);' is strange: function pointer - 'n'? – chux
@chux Скорее всего, опечатка должна быть 'allocp'. –
Почему вы увеличиваете 'allocp'? Вы уже потеряли память, поэтому не нужно заботиться об этом специальном состоянии. – Olaf