【问题标题】:Copying to a dynamically-allocated array in C复制到 C 中的动态分配数组
【发布时间】:2015-06-01 14:32:02
【问题描述】:

我正在尝试复制到 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;
}

在复制之前打印 'tempVel' 的值,之后打印 'thisBoid->velocity' 的值会得到以下输出:

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

【问题讨论】:

  • 编辑:无论 tempVel 的内容如何,​​总是复制 10 和 .5
  • 你的“数组”只有一个元素...
  • 这无法编译,您要取消引用 vec3... @iharob ..."please" 吗? :)
  • tempVel?它有 3 个用逗号分隔的浮点数。一个 vec3 对象本来就有 3 个元素

标签: c arrays dynamic copy allocation


【解决方案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 的建设性 cmets。

【讨论】:

    猜你喜欢
    • 2020-11-07
    • 2012-05-21
    • 2015-06-23
    • 2018-09-06
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    相关资源
    最近更新 更多