C 是什么导致此功能中出现分段故障?
因此,作为练习,我正在开发一个使用递归函数的代码,以便制作一个简单的数学表达式计算器。问题是,当我运行它时,我得到了一个分段错误(6)或(11),但我已经检查了100次,每个函数调用似乎只从堆栈上它正上方的函数中的变量访问内存,由指针*init提供。我哪里弄错了 代码如下: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
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
开始。更可能的是,它根本不应该是一个循环。