【发布时间】:2016-12-02 16:44:40
【问题描述】:
我有 2 个带有坐标的数组,我想将它们复制到一个数组中。我使用了 2 个 for 循环及其工作,但我想知道,如果没有它们我可以做到,我不知道如何在这种情况下使用 memcpy。这是我的代码:
int *join(int *first, int *second,int num, int size) {
int *path= NULL;
int i = 0 , j = 0;
path = (int*) malloc (2*size*sizeof(int));
for(i = 0 ; i < num; i++) {
path[i * 2] = first[i * 2];
path[i * 2 + 1] = first[i * 2 + 1];
}
for(i = num; i < size ; i++) {
path[(i*2)] = second[(j+1)*2];
path[(i*2)+1] = second[(j+1)*2 +1];
j++;
}
return path;
}
【问题讨论】:
-
这个
path[(i*2)+1]在最后一次迭代中写入无效内存。 -
@JonathanLeffler:第二个循环从
num开始,num描述first中int对的数量,而size描述结果中对的总数(即first和second中组合的对数)。我承认,变量名没有多大帮助。 -
@alk:怎么会这样?他们为
2 * sizeints 分配了空间,因此有效索引从0运行到2 * size - 1(含)。在最后一次迭代中,i是size - 1,所以i * 2 + 1是(size - 1) * 2 + 1,结果是2 * size - 1。 -
@ShadowRanger:嗯...好的;是的。更有理由展示如何使用该功能。像
int *new_arr = join(old_1, old_2, num_old_1, num_old_1 + num_old_2)这样的说明性电话会告诉我们很多关于它应该如何工作的信息。