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

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

代码块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
查阅发现是数组访问越界的问题,但我没有发现是哪儿照成的越界访问,希望那个大佬帮忙指出一下;```
删除最外层的括号在判段时的数组越界问题;
展开讨论

是不是因为读到最后一个")",就不能接着往下读了啊?,你这样多读了一位?
因为你写的有问题呀,你看看第10行到19行那里,一次性会全部读完整个字符串,不会有机会进到

else if(top==0)
    break;

里面的机会

代码可以放代码框

int 像这样;
1
展开全部 2 讨论