C 是什么导致此功能中出现分段故障?

C 是什么导致此功能中出现分段故障?,c,pointers,segmentation-fault,C,Pointers,Segmentation Fault,因此,作为练习,我正在开发一个使用递归函数的代码,以便制作一个简单的数学表达式计算器。问题是,当我运行它时,我得到了一个分段错误(6)或(11),但我已经检查了100次,每个函数调用似乎只从堆栈上它正上方的函数中的变量访问内存,由指针*init提供。我哪里弄错了 代码如下: int solve(char *expression, int *init) { int result; int l = strlen(expression); int i = *init; //Inic

因此,作为练习,我正在开发一个使用递归函数的代码,以便制作一个简单的数学表达式计算器。问题是,当我运行它时,我得到了一个分段错误(6)或(11),但我已经检查了100次,每个函数调用似乎只从堆栈上它正上方的函数中的变量访问内存,由指针*init提供。我哪里弄错了

代码如下:

int solve(char *expression, int *init) {

  int result;
  int l = strlen(expression);
  int i = *init;

  //Inicializing result:
  for (int n = 0; n <= l; n++) {
    if ((expression[n]=='1')||(expression[n]=='2')||(expression[n]=='3')||(expression[n]=='4')||(expression[n]=='5')||
    (expression[n]=='6')||(expression[n]=='7')||(expression[n]=='8')||(expression[n]=='9')) {
        result = expression[n]-48;
        break;
    }
  }

//Doing calculations:
  int j = i;
  for (j; j <= l; j++) {
    if (expression[j] == '(') {
      result = result + solve(expression, &j);
    }
    if (expression[j] == '+')
      result = result + (expression[j+1]-48);
    if (expression[j] == '-')
      result = result - (expression[j+1]-48);
    if (expression[j] == '*')
      result = result * (expression[j+1]-48);
    if (expression[j] == '/')
      result = result / (expression[j+1]-48);
    if (expression[j] == ')')
      return result;
  }
  return result;
}
int-solve(char*表达式,int*init){
int结果;
int l=strlen(表达式);
int i=*init;
//非专业化结果:

对于(int n=0;n,代码中存在无限递归

int solve(char *expression, int *init) {
  /* ... */
  int j = i;
  for (j; j <= l; j++) {
    if (expression[j] == '(') {
      result = result + solve(expression, &j);
  /* ... */
int-solve(char*表达式,int*init){
/* ... */
int j=i;

对于(j;j代码中存在无限递归

int solve(char *expression, int *init) {
  /* ... */
  int j = i;
  for (j; j <= l; j++) {
    if (expression[j] == '(') {
      result = result + solve(expression, &j);
  /* ... */
int-solve(char*表达式,int*init){
/* ... */
int j=i;

对于循环条件为
n的(j;j),请显示一个。
result=expression[n]-48;
应使用
'0'
代替
48
。在
中有一个函数/宏
isdigit()
可以更有效地进行测试。数字必须位于连续的代码点范围内;您可以使用
expression[n]>='0'&&expression[n]@Someprogrammerdude为什么
expression[strlen(expression)]
越界?您的segfault会发生,因为您在左括号中递归太深。您不需要将“it”作为指针——您无论如何都不会将任何内容赋值回。第一个循环可能应该从
i
init
开始。更可能的是,它根本不应该是一个循环。如果循环条件为
n,请显示一个.
result=expression[n]-48;
应该使用
'0'
来代替
48
中有一个函数/宏
isdigit()
可以更有效地进行测试。数字必须位于连续的代码点范围内;您可以使用
expression[n]>='0'&&expression[n]@Someprogrammerdude为什么
expression[strlen(expression)]
越界?您的segfault会发生,因为您在左括号中递归太深。您不需要将“it”作为指针——您无论如何都不会将任何内容赋值回。第一个循环可能应该从
i
init
开始。更可能的是,它根本不应该是一个循环。