直接赋值是否有效将指针数组中的指针复制到另一个变量?

时间:2012-06-09 22:58:56

标签: c pointers memory-management

我正在尝试将指针数组复制到新变量中。我不确定以下直接分配是否是执行复制的正确方法。

SVECTOR **features = (SVECTOR **) malloc(n*sizeof(SVECTOR *));
for(i = 0; i < n; i++){
    features[i] = getFeature();
}
SVECTOR **new_features = features; // Doubt: 1
SVECTOR *feature = features[0]; // Doubt: 2 

1 个答案:

答案 0 :(得分:1)

Attempt 1为您提供别名 - features和new_features引用相同的数组。 尝试2为您提供第一个功能的别名。

你想要什么,对于浅拷贝(如果getFeature()返回的指针指向的值永远不会被修改或取消分配,那就足够了)

SVECTOR **new_features = malloc(n * sizeof *features);
memcpy(new_features, features, n * sizeof *features);

如果浅拷贝不够,那么你需要做一个深层拷贝,需要知道一个特征的结构:

SVECTOR **new_features = malloc(n * sizeof *features);
for(i = 0; i < n; i++){
    new_features[i] = cloneFeature(features[i]);
}