gpt4 book ai didi

c - 使用 memcpy 时出现 "pointer being freed was not allocated"

转载 作者:行者123 更新时间:2023-12-02 05:29:47 26 4
gpt4 key购买 nike

我尝试使用memcpy 将内容从一个数组复制到另一个数组,代码如下:

#include <stdio.h>

int main(){
int *a;
a = (int*) malloc(sizeof(int) * 4);
a[0] = 4;
a[1] = 3;
a[2] = 2;
a[3] = 1;

int *b;
b = (int*) malloc(sizeof(int) * 4);
memcpy(&b, &a, sizeof(a));

free(a);
for (int i = 0; i < 4; i++){
printf("b[%d]:%d",i,b[i]);
}
printf("%d\n",sizeof(b));
free(b);

return 0;
}

但是,当我尝试运行它时,遇到以下错误:

b[0]:4b[1]:3b[2]:2b[3]:18
mem(6131,0x7fffbb4723c0) malloc: *** error for object 0x7fa5a4c02890: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

如果我删除 free(b) 代码段,这个错误就会消失,但是,我不知道为什么,因为我明确地为它分配了资源。

最佳答案

您的memcpy 是错误的。您正在将指针 a 的值复制到 b 而不是将 a 指向的数据复制到 b 指向的缓冲区。您最终会执行双重释放,因为 ab 指向同一个地方。将您的 memcpy 调用替换为:

memcpy(b, a, sizeof(int)*4);

关于c - 使用 memcpy 时出现 "pointer being freed was not allocated",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42653675/

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