我在C中创建了一个简单的函数,它将参数1指向int,1指向int的双指针和一个整数(第三个参数可能没用,因为它表示存储在第一个空格中的整数的数量论点指出)。它的作用是: 首先,在内存中留出足够的空间来容纳2个整数,并将第二个参数设置为指向该空间。其次,将整数从第一个参数指向的空间复制到第二个参数指向的空间。第三,它将第一个参数指向的空间中的所有整数递增1.我知道这个函数没用,但我想知道我的解决方案出了什么问题。这是代码:
#include <stdlib.h>
#include <stdio.h>
int *x, *y;
void duplicateAndIncreaseByOne(int *arg1, int **arg2, int arg1Elements){
int ctr;
*arg2 = (int *) malloc(arg1Elements * sizeof(int));
for(ctr = 0; ctr < arg1Elements; ctr++){
**(arg2 + ctr) = *(arg1 + ctr);
*(arg1 + ctr) = *(arg1 + ctr) + 1;
}
}
int main() {
int j;
y=(int *)malloc(2*sizeof(int));
*y=10; *(y+1)=50;
duplicateAndIncreaseByOne(y, &x, 2);
printf("The pointer y contains the elements y[0] = %d and y[1] = %d\n", y[0], y[1]);
printf("The pointer x contains the elements x[0] = %d and x[1] = %d\n", x[0], x[1]);
}
答案 0 :(得分:2)
在第
行**(arg2 + ctr) = *(arg1 + ctr);
您要将偏移量添加到arg2
而不是*arg2
。那应该是
*(*arg2 + ctr) = *(arg1 + ctr);
目前,您正在取消引用不存在的int**
过去arg2
。