作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Linux 机器上使用 gcc 通过我的 php 脚本编译 C 代码。但如果 C 代码包含无限循环,编译器就会卡住。
我的 PHP 脚本是这样的..
shell_exec('gcc input.c -o output 2> compile.txt');
$output=shell_exec('./output');
“input.c”文件是这样的..
#include<stdio.h.
void main()
{
while(1)
prinf("This is infinite loop");
}
当我编译 PHP 代码时,它给出了一个
**PHP Fatal error: Out of memory (allocated 403177472) (tried to allocate 804896768 bytes)**
我尝试过超时 5 秒: $output=shell_exec('./output');
但是它不起作用,尽管如果我这样做它就会起作用..
int i;
while(1)
{
scanf("%d",&i);
}
..在我的 input.c 文件中。我已经搜索了很多但徒劳..我做错了什么?
最佳答案
第一点是,卡住的不是编译器。编译器可以很好地编译代码。在执行过程中,您的代码将进入无限循环。因此,如果您的第一个代码,它只是继续执行,没有任何暂停或退出,并且一直占用 CPU,给人一种“被卡住”的感觉。
关于您的第二个代码的工作原理,这是因为您正在暂停以获取输入。但是,同样,在这种情况下,您未能为程序提供退出。因此,实际上,第二个代码与第一个代码相同,但它只是不占用 CPU。
只有一种方法可以纠正此问题,即修改“C”代码,使其不出现没有任何退出的无限循环。
示例:
int i;
while(1)
{
scanf("%d",&i);
if(0 == i)
{
break; //Just an example as to how you can exit from an infinite loop
}
}
关于c - 如何在linux上设置gcc编译.c文件的超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11464772/
我是一名优秀的程序员,十分优秀!