0

C で、int への 1 つのポインター、int への 1 つの double ポインター、および整数を引数として取る単純な関数を作成しました (3 番目の引数は、最初の引数が指す空間に格納されている整数の数を表すため、おそらく役に立たないでしょう)。 )。まず、メモリ内に 2 つの整数を保持するのに十分なスペースを作成し、そのスペースを指すように 2 番目の引数を設定します。次に、最初の引数が指すスペースから 2 番目の引数が指すスペースに整数をコピーします。3 番目に、最初の引数が指す空間内のすべての整数を 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 に答える