0

我在 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]);
}
4

1 回答 1

2

在行

**(arg2 + ctr) = *(arg1 + ctr);

您正在将偏移量添加到arg2而不是*arg2. 那应该是

*(*arg2 + ctr) = *(arg1 + ctr);

目前,您正在取消引用一个不存在的int**过去arg2

于 2013-04-13T14:50:34.327 回答