2011-10-04 73 views
-1

假設我想給一個指針賦值。在指針中賦值的麻煩

int **a; 

int** function(x){ 
    int **b; 
    ... 
    return b; 
} 

這可能嗎?

a=function(x); 

我很困惑。請讓我知道它。 我檢查了所有的行,但只有指針分配似乎是錯誤的。所以,在這裏不用的問題代碼(這可能是複雜的看,但我通過評論簡化它,請參閱註釋):

int* side_x_y(int ndx, int ndy,int flag_right_0_left_1_2,int flag_up_0_down_1_2){ 
    int * node_number=(int*)malloc(sizeof(int)*(ndx*ndy*2+1));/// ***this pointer returns to segment_matrix function***/////// 
    for(int i=1;i<=ndx*ndy*2;i++){ 
     node_number[i]=0; 
     } 
    //int node_number[ndx+ndy]={}; 
    //memset (node_number, 0, (ndx+ndy)*sizeof (int)); 
    if(flag_up_0_down_1_2==0){ 
     for(int i=1;i<=ndx;i++){ 
      node_number[i]=i; 
     } 
    } 
    if(flag_up_0_down_1_2==1){ 
     for(int i=1;i<=ndx;i++){ 
      node_number[i]=(ndy-1)*ndx+1+i; 
     } 
    } 
    if(flag_right_0_left_1_2==0){ 
     for(int i=1;i<=ndy;i++){ 
      node_number[i]=ndx*i; 
     } 
    } 
    if(flag_right_0_left_1_2==0){ 
     for(int i=1;i<=ndy;i++){ 
      node_number[i]=1+ndx*(i-1); 
     } 
    } 
    return node_number; 
    } 
int** segment_matrix(int ndx,int ndy){ 
    int *nodes; 
    nodes=side_x_y(ndx, ndy,1,2);////*** here i have used nodes pointer***//// it returns only 1 where it should not be one/// 
    //for(int i=0;i<ndy;i++) 
    //printf("%d",nodes[i]); 
    int ns=ndy-1; 
    int **segment=(int**)malloc(sizeof(int)*(ns+1)); 
    for(int s=1;s<=ns;s++){ 
     segment[s]=(int*)malloc(sizeof(int)*(2+1)); 
    } 
    int kk=0; 
    for(int s=1;s<=ns;s++){ 
     for(int i=1;i<=2;i++){ 
     segment[s][i]=nodes[kk]; 
     kk++; 
     if(i==2){ 
      kk--; 
     } 
     } 
    } 
    return segment; 
} 

裏面的主要功能:

int **nss; 
nss=segment_matrix(ndx,ndy);////*** it is the most confusing part***/// please see 
//printf("%d",nss[0][0]); 
int Ns=ndy-1; 
double bv_T_g=0; 
double bv_T_q=0; 
Complex *gamma=(Complex*)malloc(sizeof(Complex)*(Ns+1)); 
Complex *q=(Complex*)malloc(sizeof(Complex)*(Ns+1)); 
for(int i=1;i<=Ns;i++){ 
    gamma[i]=assign_complex(bv_T_g,0); 
    q[i]=assign_complex(bv_T_q,0); 
} 
int** ns=(int**)malloc(sizeof(int*)*(Ns+1)); 
for(int i=1;i<=Ns;i++){ 
    ns[i]=(int*)malloc(sizeof(int)*(2+1)); 
} 
for(int i=1;i<=Ns;i++){ 
    for(int j=1;j<=2;j++){ 
     ns[i][j]=0; 
    } 
} 
+2

這看起來OK。你確切的問題是什麼? – Mat

+1

'int ** function(x)'?我假設你有'x'的數據類型? – Mehrdad

回答

1

是的,它的可能。你爲什麼困惑?

+0

,因爲我的代碼不工作。我會再次看到它。 – gman

+0

@gman做下去......也許你應該改變你的問題? – littleadv

2

正如所寫的,代碼不清楚,但如果在函數內部分配給b的值是安全的,則代碼可以正常。例如,如果您分配整數數組的指針與calloc(),那麼代碼就可以了:

int **function(size_t x) 
{ 
    int **b = calloc(x * sizeof(*b)); 
    if (b == 0) 
     ...report error... 
    return b; 
} 

... 
a = function(23); 

不會是安全的什麼是指針返回到本地變量,如:

int **function(size_t x) 
{ 
    int *array[23]; 
    int **b = array; 
    return b;   // Undefined behaviour 
} 
0

是(短&簡單回答你的問題)

您更新後:

1的錯誤是

int **segment=(int**)malloc(sizeof(int)*(ns+1)); 
    for(int s=1;s<=ns;s++){ 
     segment[s]=(int*)malloc(sizeof(int)*(2+1)); 

我覺得應該有

int **segment=(int**)malloc(sizeof(int*)*(ns+1)); 

改變

sizeof(int)--> sizeof(int*) 

2>在main()

nss=segment_matrix(ndx,ndy); 

你正在服用此函數的輸出nss其中你還沒有使用?

3>

if(flag_right_0_left_1_2==0){ 
     for(int i=1;i<=ndy;i++){ 
      node_number[i]=1+ndx*(i-1); 
     } 

你想寫出

if(flag_right_0_left_1_2==1){ 
     for(int i=1;i<=ndy;i++){ 
      node_number[i]=1+ndx*(i-1); 
     } 
+0

是的,你是正確的,但它仍然顯示錯誤的結果 – gman

+0

請參閱我的第2點以獲取更多信息 –

+0

我稍後使用它..它顯示nss [s-1] [i-1]評估中的一個斷點代碼被限制爲show..sorry那 – gman