复制到C

时间:2015-06-01 14:32:03

标签: c arrays dynamic copy allocation

我试图复制到C中动态分配的数组(源数组可能会也可能不会动态分配。数组的第一个元素被正确复制,但其余部分则没有。可以告诉任何人我做错了什么?

我在这里调用方法:

vec3 tempVel = {
    (float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE,
    (float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE,
    (float)rand()/(float)RAND_MAX * (2.0f * INIT_VELOCITY_DIMENSION_MAGNITUDE) - INIT_VELOCITY_DIMENSION_MAGNITUDE
};
thisBoid->velocity = copyArrays2(&tempVel, 3);

方法:

vec3* copyArrays2(vec3 *src, int len){

    vec3 *tempArray = (vec3*)malloc(len*sizeof(vec3));
    for(int i=0; i<len; i++){
        *tempArray[i] = *src[i];
    }

    return tempArray;
}

打印&#39; tempVel&#39;的值在复制之前和这个&lt;&gt;速度&#39;之后给出以下输出:

{0.895216, -0.107424, 0.532019}
{0.895216, 10.000000, 0.500000}

1 个答案:

答案 0 :(得分:1)

*tempArray[i]是第i个vec3的第一个元素。

Operator precedence会对其进行评估*(tempArray[i]),即tempArray[i][0]。仅触摸每个vec3的第一个元素。如果vec3是伪装的普通数组,你将不得不在内循环中迭代它的元素。

示例代码,提供typedef float vec3[3];

for(int i=0; i<len; i++){
   for(int ii=0; ii<3; ii++){
        tempArray[i][ii] = src[i][ii];
    }
}
顺便说一下,我想借此机会感谢iharob的建设性意见。