gpt4 book ai didi

复制到 C 中动态分配的数组

转载 作者:行者123 更新时间:2023-11-30 15:19:35 25 4
gpt4 key购买 nike

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

最佳答案

*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 的建设性意见。

关于复制到 C 中动态分配的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30576215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com