我正在尝试学习如何复制分配给malloc的内存空间。我想最好的办法是使用memcpy。
我对Python比较熟悉。相当于我在Python中所做的工作是:
import copy
foo = [0, 1, 2]
bar = copy.copy(foo)
这是我到目前为止所拥有的。
/* Copy a memory space
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
// initialize a pointer to an array of spaces in mem
int *foo = malloc(3 * sizeof(int));
int i;
// give each space a value from 0 - 2
for(i = 0; i < 3; i++)
foo[i] = i;
for(i = 0; i < 3; i++)
printf("foo[%d]: %d\n", i, foo[i]);
// here I'm trying to copy the array of elements into
// another space in mem
// ie copy foo into bar
int *bar;
memcpy(&bar, foo, 3 * sizeof(int));
for(i = 0; i < 3; i++)
printf("bar[%d]: %d\n", i, bar[i]);
return 0;
}
此脚本的输出如下:
foo[0]: 0
foo[1]: 1
foo[2]: 2
Abort trap: 6
我正在用
gcc -o foo foo.c
编译脚本。我在2015 Macbook Pro上。我的问题是:
这是复制用malloc创建的数组的最佳方法吗?
什么意思?
我只是误解了
Abort trap: 6
是做什么的还是如何使用它?谨致问候,
马库斯·谢泼德
最佳答案
变量bar
没有分配内存,它只是一个未初始化的指针。
你应该像以前那样
int *bar = malloc(3 * sizeof(int));
然后您需要将操作员的
foo
地址删除为memcpy(bar, foo, 3 * sizeof(int));