如果我收到指针地址和指向指针的指针,我可以从函数修改指针值吗?

标签 c pointers segmentation-fault

基本代码如下:

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++;
      }
    }
  }
}

当然,这样的结果就是“Segmentation Fault”。 我认为我没有正确使用指向指针符号的指针,或者从一个指针到一个指针,从一个函数内部修改一个指针可能是不“合法的”。所以我对此很迷茫。

.有人可以帮我吗?

最佳答案

其他地方可能存在段错误:

      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 循环但会以一种您几乎不会注意到的方式弄乱您的代码,直到您得到错误的返回值)特别是因为您似乎根本没有初始化这些数组。

关于如果我收到指针地址和指向指针的指针,我可以从函数修改指针值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31015724/

相关文章:

c - 试图找出为什么我的结构指针存储数据不准确

C 数组索引和访问越界

c++ - 是否可以在不显式迭代每个元素的情况下深度复制指针容器?

c - 为什么我会得到分段(核心转储)?

c - 在 C 中调用 fork() 后引用指针

检查结构体的递归子级是否为 NULL(C 语言)

c - 将 int 拆分为单个数字。如何处理零

c - 当我用 c 语言编译程序时,为什么会得到一个 undefined reference (例如 `glColor3f')?

c - 正确的多线程程序终止。 C

c++ - 有效内存上的段错误