讨论/算法和数据结构/删除最外层的括号在判段时的数组越界问题;/
删除最外层的括号在判段时的数组越界问题;

删除最外层的括号在判段时的数组越界问题;

代码块char * removeOuterParentheses(char * S){
 int i=0,j=0,idex,top=0 ,k=0;
 int n;
 char *p;
 n=strlen(S);
 p=(char *)malloc(sizeof(char) *n) ;
 while(1)
 {
        idex=i;
        while(1)
        {
              if(S[i]=='(')
              top++;
              else if(S[i]==')')
              top--;
              else if(top==0)
              break;
              i++;
        }
        for(j=idex+1 ;j<i;j++)
        {
               p[k]=S[j];
               k++;
        }
        i++;
        if(S[i]=='\0')
        break;

 }
 p[k]='\0';
 return p;
}
//
  while(1)
        {
              if(S[i]=='(')
              top++;
              else if(S[i]==')')
              top--;
              else if(top==0)
              break;
              i++;
        }
改为
 while(1)
        {
              if(S[i]=='(')
              top++;
              else
              top--;
              if(top==0)
              break;
              i++;
        }
则可以通过;
  题目:|1021| 删除最外层的括号| 简单|
出现错误;
==29==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x60200000001b at pc 0x00000040188b bp 0x7ffcffdcb3d0 sp 0x7ffcffdcb3c0 READ of size 1 at 0x60200000001b thread T0
查阅发现是数组访问越界的问题,但我没有发现是哪儿照成的越界访问,希望那个大佬帮忙指出一下;```
删除最外层的括号在判段时的数组越界问题;
展开讨论

1、以后的代码建议用代码块包起来,这样有缩进比较便于阅读;
2、你原先的代码内层while的break条件是top为0且非(和),也就是S[i]为'\0',外层你在之后又进行了一次i++以后再判断S[i]的值就会越界

1
展开全部 2 讨论