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 に答える