gpt4 book ai didi

c - 我的 realloc 函数返回段错误

转载 作者:行者123 更新时间:2023-11-30 17:23:24 26 4
gpt4 key购买 nike

我写了函数 - malloc、free 和 realloc malloc 函数工作正常。问题出在 realloc 的函数中,它返回给我段错误,我不知道为什么会发生这种情况。如果您能帮助我理解为什么会发生这种情况以及如何解决它,我会很高兴。

我的代码-

#include <unistd.h>
#include <stdio.h>

void *malloc (size_t size);
void *realloc (void *ptr, size_t size);
void free (void *ptr);

typedef struct metadata_block *p_block;
struct metadata_block
{
size_t size;
p_block next;
int free;
};

p_block head = NULL;

int
main ()
{
char *str;
int *a;
a = (int *) malloc (4);
scanf ("%d", a);
printf ("String = %d\n", *a);
a = (int *) realloc (str, 25);
scanf ("%d", a);
printf ("String = %d\n", *a);

return 0;
}

void *
malloc (size_t size)
{
void *my_malloc;
p_block tmp;

if (size <= 0)
{
return NULL;
}

if (head == NULL)
{
head = (void *) sbrk (size + sizeof (struct metadata_block));
head->size = size;
head->free = 0;
head->next = NULL;
return (void *) head + sizeof (struct metadata_block);
}
else
{
p_block tmp = head;
while (tmp->next != NULL)
{
tmp = tmp->next;
}
tmp->next = (void *) sbrk (size + sizeof (struct metadata_block));
tmp->size = size;
tmp->free = 1;
tmp->next = NULL;
return (void *) size + sizeof (struct metadata_block);
}
}

void *
realloc (void *ptr, size_t size)
{
void *newptr;

if (ptr == NULL)
{
return malloc (size);
}
if (size == 0)
{
return (ptr);
}

newptr = malloc (size);
return (newptr);

}

void
free (void *ptr)
{
p_block tmp;

if (tmp->free == 1)
{
tmp = 0;
}
ptr = NULL;
}

最佳答案

你重新分配的行为应该像这样:

  • 如果ptr == NULL,则只需malloc
  • 如果ptr!= NULL:
    • malloc 新大小的新指针 (newPtr)
    • memcpy 内容从 ptrnewPtr
    • 免费ptr
    • 返回newPtr

请记住,realloc 需要一个通过调用 malloc 给出的指针(或 NULL)。

恕我直言,实现 realloc 的行为(如果可能的话,尝试返回相同的地址)对于您的任务来说太复杂了。

关于c - 我的 realloc 函数返回段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27601540/

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