我正在尝试学习如何复制分配给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));

09-06 03:51