Я пытаюсь реализовать пример из книги Язык программирования C .Пример реплицирует упрощенную версию malloc .Моя реализация вызывает ошибку сегментации.Функции alloc и afree в основном скопированы из книги.Я пытаюсь использовать эти функции в основном.Насколько я понял, выражение * (pointer + i) дает мне значение, хранящееся в адресе рядом с указателем, если оба адреса находятся в одном массиве.Это должно быть неявно удовлетворено, но, очевидно, этого недостаточно.
Как я могу фактически использовать функции alloc и afree для создания динамического массива?
#include <stdio.h>
int *alloc(int);
void afree(int *);
/* RETURNS SEGMENTATION FAULT, WHY? */
int main()
{
int *dyna_arr;
dyna_arr = alloc(50);
/* fill the array with integers */
for (int i = 0; i < 50; i++)
{
*(dyna_arr+i) = i;
}
for (int i=49; i>=0;i--)
{
printf(" %d", *(dyna_arr+i));
}
afree(dyna_arr);
}
#define ALLOCSIZE 10000
static int allocbuf[ALLOCSIZE];
static int *allocp =allocbuf; /* next free position in buffer */
/* alloc: return pointer to n ints */
int *alloc(int n)
{
if (allocbuf + ALLOCSIZE - allocp >= n) /* is there enough space in the buffer? */
{
allocp += n;
return allocp - n;
}
else /* not enough space */
{
return 0;
}
}
/* afree: free the storage pointed to by p */
/* Only possible in LIFO fashion */
void afree(int *p)
{
if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
{
allocp = p;
}
}