2013-04-13 64 views
0

我用C這需要作爲參數1個指針爲int,1個指針由一個簡單的功能的功能到int和一個整數(第三個參數是可能無用的,因爲它代表整數的數存儲在第一個參數指向的空間中)。它的作用是: 首先,在內存中留出足夠的空間來容納2個整數,並將第二個參數設置爲指向該空間。其次,從第一個參數指向第二個參數指向的空間的空間複製整數。第三,它將第一個參數指向的空間中的所有整數遞增1.我知道這個函數沒用,但我想知道我的解決方案出了什麼問題。下面是代碼:關於使用指針用C

#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

+1

是的,就是這樣。 – 2013-04-13 14:55:37

+0

謝謝!它現在工作!但我不明白爲什麼我沒有在編譯時出錯。 – mgus

+1

@KostasKonstantinidis編譯器只能檢查類型是否正確,而不是語義 - 它不知道你想要做什麼。類型是正確的,所以編譯器沒有理由抱怨。 –