变量 'userStr' 周围的堆栈已损坏 (C)
Stack around the variable 'userStr' was corrupted (C)
我试过查找这个,每一个似乎都有一个完全不同的答案。
我有这个 REPL 函数,可以将用户的字符串输入与确定性有限自动机 (DFA) 进行比较,并且运行得非常好。
void REPL(DFA userDFA)
{
char userStr[] = {'0'};
printf("\nWhat string would you like to use?\n");
scanf("%s", userStr);
if (DFA_execute(userDFA, userStr))
printf("\nAccepted\n");
else
printf("\nRejected\n");
} //program crashes right here
int main(void){...}
但是,一旦到达函数的末尾,程序就会崩溃并给出以下错误:
Run-Time Check Failure #2 - Stack around the variable 'userStr' was corrupted.
char userStr[] = {'0'};
这意味着userStr
只能保存一个值;包括终结者。您没有指定大小,所以它查看了 {}
中的内容。那里只有一个元素,所以这就是它使用的大小。将数组的末尾写到它之后的内存中会破坏堆栈(因为它保存着重要的东西,比如 return 地址和其他数据)。
指定大小以允许它容纳更多:
char userStr[100] = {'0'};
这是给它一个 100 长的任意大小。您可能需要给它一个更大的大小,或使用动态内存分配(malloc
等)分配到运行时已知的大小。
我试过查找这个,每一个似乎都有一个完全不同的答案。
我有这个 REPL 函数,可以将用户的字符串输入与确定性有限自动机 (DFA) 进行比较,并且运行得非常好。
void REPL(DFA userDFA)
{
char userStr[] = {'0'};
printf("\nWhat string would you like to use?\n");
scanf("%s", userStr);
if (DFA_execute(userDFA, userStr))
printf("\nAccepted\n");
else
printf("\nRejected\n");
} //program crashes right here
int main(void){...}
但是,一旦到达函数的末尾,程序就会崩溃并给出以下错误:
Run-Time Check Failure #2 - Stack around the variable 'userStr' was corrupted.
char userStr[] = {'0'};
这意味着userStr
只能保存一个值;包括终结者。您没有指定大小,所以它查看了 {}
中的内容。那里只有一个元素,所以这就是它使用的大小。将数组的末尾写到它之后的内存中会破坏堆栈(因为它保存着重要的东西,比如 return 地址和其他数据)。
指定大小以允许它容纳更多:
char userStr[100] = {'0'};
这是给它一个 100 长的任意大小。您可能需要给它一个更大的大小,或使用动态内存分配(malloc
等)分配到运行时已知的大小。