簡體   English   中英

如果我收到帶有指針的指針的指針地址,是否可以通過函數修改指針值?

[英]Can I modify a pointer value, from a function, if i receive the pointer address, with a pointer to pointer?

基本上是以下代碼:

void calculate(int, int, char *, char *, char **); //the prototype of the function
int main(){

  int option;
  int operation_int=0;
  char operation[14];
  char value1[20];
  char value2[20];
  char *result;

  result = (char *)malloc(20*sizeof(char));
  calculate(2, operation_int, value1, value2, &result);

  return 0;
}
void calculate(int option, int operation_integ, char *var1, char *var2, char **res){
  int i=0;
  int value1 = 0;
  int value2 = 0;
  int calc_result = 0;


  switch(operation_integ){

    case 1:

    switch(option){

      case 1:
       break;

      case 2:
      while( ( (var1[i] != '\0') || (var2[i] != '\0') ) ){
        if( (var1[i] != '\0') ){ calc_result= calc_result + ( var1[i] - '0' ) * pow(10,i);}
        if( (var2[i] != '\0') ){ calc_result= calc_result+ ( var2[i] - '0' ) * pow(10,i);}
        i++;
      }

      i=0;

      while(calc_result!= 0){ //HERE IS SOMETHING WRONG
        *(*(res+i)) = (char)calc_result % 10;
        calc_result = calc_result/10;
        i++;
      }
    }
  }
}

因此,其結果當然是“分段錯誤”。 我認為我沒有正確使用指向指針符號的指針,或者從函數內部從指向指針的指針修改指針不是合法的。 所以我對此很迷茫。

有人可以給我些幫助嗎?

其他地方可能存在段錯誤:

      while( ( (var1[i] != '\0') || (var2[i] != '\0') ) ){

如果您使用的是varN數組,例如:

var1 = {'2', '1', '\0', '3' .... (other non '\0' chars)};
var2 = {'3', '2', '5', '\0' .... (other non '\0' chars)};

您的while循環將繼續,最終可能會產生段錯誤(如果您很不幸,您的其他變量可能會設置為0,從而結束while循環,但會以一種直到您得到錯誤的返回值之前幾乎都不會注意到的方式弄亂代碼)尤其是因為您似乎根本沒有初始化這些數組。

一個問題: *(*(res+i))

malloc返回一個指向連續內存塊的指針。 您將以&result發送calculate()指針的地址 ,然后將i添加到該地址。 當用第一個(內部) *取消引用此新地址時,對於i > 0任何內容,您都會獲得一些隨機存儲器的內容。 如果此隨機內存的內容不是一個有效的內存地址,則在嘗試使用第二個(最外面的) *取消引用時會出現段錯誤。

我猜想您想增加malloc返回的指針,以便訪問其保留的內存塊中的位置。

您可以嘗試這樣聲明函數:

void calculate(int, int, char *, char *, char *);

分配內存並像這樣調用它:

result = malloc( 20 * sizeof(char) );
calculate(2, operation_int, value1, value2, result);

並在result塊中設置第i個字符,如下所示:

*( res + i*sizeof(char) ) = (char)calc_result % 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM