gpt4 book ai didi

无法重新分配双指针动态内存

转载 作者:行者123 更新时间:2023-12-04 10:48:36 28 4
gpt4 key购买 nike

我试图在另一个方法/函数中增加一个双指针缓冲区。但是,分配的缓冲区的大小不会改变。这是我试过的代码。

#include <stdio.h>
#include <stdlib.h>

void change_buffer_size(char ** buffer)
{
*buffer = realloc(*buffer, sizeof(char) * 2);
}

int main()
{
char **buffer = malloc(sizeof(char) * 1);
*buffer[0] = 'H';
change_buffer_size(buffer);
*buffer[1] = 'i';
printf("%s\n", *buffer);
return 0;
}

我收到了 Segmentation fault (core dumped)错误。

最佳答案

char **buffer = malloc(sizeof(char) * 1); 

这是错误的。您现在有一个 char** ,所以它指向的是一个 char* ,但里面只有一个 char 足够的空间.你也只分配了一层双指针。
*buffer[0] = 'H';

由于上述问题,这一行会导致段错误。它试图在未定义的位置写入内存。

解决这个问题的最好方法是正常分配第一层,使用 &必要时,只使用 malloc对于第二层。

另外, %s在看到空字节之前不会停止写入,因此您需要分配并写入其中之一。以下是您解决所有问题的方法:
#include <stdio.h>
#include <stdlib.h>

void change_buffer_size(char ** buffer)
{
*buffer = realloc(*buffer, sizeof(char) * 3);
}

int main()
{
char *buffer = malloc(sizeof(char) * 1);
buffer[0] = 'H';
change_buffer_size(&buffer);
buffer[1] = 'i';
buffer[2] = '\0';
printf("%s\n", buffer);
return 0;
}

关于无法重新分配双指针动态内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59587460/

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