gpt4 book ai didi

c - malloc 复制中的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:53 27 4
gpt4 key购买 nike

我正在尝试实现 The C programming language 一书中的示例。该示例复制了 malloc 的简化版本。我的实现产生了段错误。函数alloc和afree基本都是从书上抄来的。我正在尝试在 main 中使用这些功能。据我所知,*(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;
}
}

最佳答案

问题是

if (allocbuf + ALLOCSIZE - allocp <= n) /* is there enough space in the buffer? */

你的比较是错误的。应该是available memory >= n但是你的检查if available memory <= n并返回 0 ;

下面的修改应该可以工作

if (((allocbuf + ALLOCSIZE) - allocp) >= n) /* is there enough space in the buffer? */

关于c - malloc 复制中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52027736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com