我想了解如何复制分配给malloc的内存空间。我假设最好的办法是使用memcpy。中止陷阱:6,使用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
是什么意思?- 我只是误解
memcpy
做什么或如何使用它?
亲切的问候,
马库斯·谢泼德
砸
&
地址运算符'bar'没有分配给它的内存,它只是一个未初始化的指针。当你这样做时(就像你为'foo'做的那样),放下'&'并使用'memcpy(bar,foo,3 * sizeof(int));' –@WeatherVane非常感谢。发布作为答案,如果你想要代表。 – marcusshep