当我有一个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)
条件会使程序崩溃。这是某种崩溃吗?如果是,这是否意味着如果我在共享代码的第一部分中输入了太多的内容,程序也会崩溃呢?
谢谢=)
1条答案
按热度按时间5ktev3wc1#
这不是一个正确编写的C++程序。我知道一些初学者程序员有麻烦的循环等,但你会学会随着时间的推移。
1.不要再次调用main。Main函数应该是唯一的,并且在编译时只调用一次。
1.你有一个while循环,条件被设置为true,这意味着它几乎会无休止地运行(可能你的目标不是得到一个无限循环)。
1.为了最终停止while循环,你可以把条件从true改为(someVariable == true或someVariable等于某个值),然后确保有一个停止点。您也可以在while循环体中执行此操作。放置一个if语句来检查特定的内容(变量值),如果为真或为假(由您决定),则使用break语句或将其用作停止循环的停止条件。