首页 文章

为什么取消注释此行会导致分段错误? [关闭]

提问于
浏览
3

出于某种原因,取消注释最后一行会导致分段错误 . 我不知道为什么会发生这种情况,因为它只是创建一个新的字符串 . 代码是:

char str[] = "()";
if (isBalanced(str))
    printf("%s is balanced\n", str);
else printf("%s is not balanced\n", str);
char str1[] = "((1()";
if (isBalanced(str1))
    printf("%s is balanced\n", str1);
else printf("%s is not balanced\n", str1);
//char str2[] = "((1){()})";

没有错误,程序按预期运行,但是一旦取消注释最后一行,就会在任何打印语句打印之前发生分段错误 .

我发现将str2 []更改为hi []可以解决问题,但为什么会这样呢? stdio.h没有定义任何干扰这里的宏,并且str2不是C中的关键字 . 如果我忽略了一些愚蠢的东西,请告诉我 .

这是完整的计划 .

#include <stdio.h>
int isBalanced(char *str) {
    int x = 0;
    int length;
    while (str[x++] != '\0') length++;
    char open[50];
    unsigned int numOpen = 0;
    for (x = 0; x < length; x++) {
        if (str[x] == '{')
            open[numOpen++] = str[x];
        if (str[x] == '(')
            open[numOpen++] = str[x];
        if (str[x] == '[')
            open[numOpen++] = str[x];
        if (str[x] == '}') {
            if (open[numOpen-1] != '{')
                return 0;
            else numOpen--;
        } 
        if (str[x] == ')') {
            if (open[numOpen-1] != '(')
                return 0;
            else numOpen--; 
        }
        if (str[x] == ']') {
            if (open[numOpen-1] != '[')
                return 0;
            else numOpen--; 
        }
    }
    return numOpen == 0;
}

int main() {
    char str[] = "()";
    if (isBalanced(str))
        printf("%s is balanced\n", str);
    else printf("%s is not balanced\n", str);
    char str1[] = "((1()";
    if (isBalanced(str1))
        printf("%s is balanced\n", str1);
    else printf("%s is not balanced\n", str1);
    char str2[] = "((1){()})";
    //if (isBalanced(str1))
    //  printf("%s is balanced\n", string);
    //else printf("%s is not balanced\n", string);
}

提前致谢 .

1 回答

  • 4

    如果我忽视了一些愚蠢的事情,请告诉我 .

    是的,你是 . 您正在使用未初始化的变量 . 这导致了不确定的行为 . 更改

    int length;
    

    int length = 0;
    

    isBalanced .

相关问题