c++ 两个函数之间的连续调用

egdjgwm8  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(176)

当我有一个main()函数调用另一个函数时,即,

...
void somef(int);

int main() {
int a {};
std::cin>>a;
somef(a)

return 0; // never returns. }
...

而且,如果我调用的函数是这样的:

...
void somef(int a) {
main()
return; // to make the not-returning behaviour more clear.
}
...

我可以让存储激活记录的内存溢出吗?因为程序卡在main()somef(int)函数之间而没有返回?我目前正在编写一个这样调用的程序,它似乎只是暂时工作。但是,我想知道如果我以某种方式连续输入太多输入,我的程序是否会崩溃。为了测试这个问题,我尝试了下面的代码:

#include <iostream>
  
using namespace std;

int somef(int);
  
int main()
{
    long long int a;
    while (true) {
           
           somef(a);
    }
    return 0;
}

int somef(int a)
{
long long int b;

main();

return 1; // never enters return.
}

我希望long long int在激活记录中占用更多的内存。结果是程序在大约半秒后终止,没有任何错误。但是,我预计while(true)条件会使程序崩溃。这是某种崩溃吗?如果是,这是否意味着如果我在共享代码的第一部分中输入了太多的内容,程序也会崩溃呢?
谢谢=)

5ktev3wc

5ktev3wc1#

这不是一个正确编写的C++程序。我知道一些初学者程序员有麻烦的循环等,但你会学会随着时间的推移。
1.不要再次调用main。Main函数应该是唯一的,并且在编译时只调用一次。
1.你有一个while循环,条件被设置为true,这意味着它几乎会无休止地运行(可能你的目标不是得到一个无限循环)。
1.为了最终停止while循环,你可以把条件从true改为(someVariable == true或someVariable等于某个值),然后确保有一个停止点。您也可以在while循环体中执行此操作。放置一个if语句来检查特定的内容(变量值),如果为真或为假(由您决定),则使用break语句或将其用作停止循环的停止条件。

相关问题