0

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

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 
4

1 回答 1

1

尝试 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]);
}
于 2012-06-09T23:09:39.653 回答