2012-03-28 46 views
0

我试图执行一个非常简单的程序,运行“ls”命令 我在Mac OS 10.7下使用XCode和C++ 这是验证码:execl - 现在没有内存可用于编程(OS X/XCode/C++)

#include <iostream> 
using namespace std; 

int main(void) 
{ 
    cout << "Hello world" << endl; 
    execl("/bin/ls","ls",NULL); 
    return 0; 
} 

以下输出

世界,你好

没有可程序现在内存后经常死机:不安全的调用malloc

我试图谷歌它,但没有运气,对我可能做错了什么想法?

+0

该代码不会编译。你能发布一个完整的程序吗? – 2012-03-28 15:02:04

+0

你去了,#include 和使用命名空间std失踪 – Dabrorius 2012-03-28 15:16:17

+0

它仍然不会编译。我只能假设你真的*不是在运行这个程序,而是一些其他程序看起来有点像它。如果您不会向我们展示实际的计划,我们可以做的事情就不多了。 – 2012-03-28 15:18:32

回答

2

这只是“我的意见”

从手册页:

的功能exec类有 新进程替换当前的进程映像图片。

它可能是它试图替换调试器进程,并因此崩溃(应用程序从Xcode运行..)。如果执行从它的工作原理命令行应用程序...

+0

你的先生是100%正确的:)我也发现,如果你先分解过程,它甚至可以从xcode中正常工作。非常感谢。 – Dabrorius 2012-03-28 15:35:25

+0

+1:良好的分析 – Sid 2012-03-28 15:54:05

0

似乎很好地工作:

http://ideone.com/8AoZ3

但好像你的平台某种奇怪的递归正在发生的。你可以改变您的来电:

execl("/bin/ls","/bin/ls",0); 
+0

我仍然得到相同的错误。另外它不仅仅是ls,而且也是其他所有的程序。 :(当它崩溃,我可以看到在Xcode只有一个线程正在运行,所以我想这可能不是递归? – Dabrorius 2012-03-28 15:03:53

+0

我从来没有使用xcode,但显然这似乎不与C/C + +。有没有重新启动xCode也许你可以尝试一下调试器,逐行阅读,看看会发生什么,对不起,只是随机的想法,试着增加你的系统的堆栈大小,例如 – Sid 2012-03-28 15:17:45

+0

好吧,它被困在一堆汇编代码中(至少我认为它的汇编)下面是一个截图http://www.deviantpics.com/?v=vdx39.png。我尝试重新启动XCode和OS X,但它没有帮助。我尝试增加堆栈大小,如此处所述http:// stackoverflow。 com/questions/2092495/increase-stack-size-with-xcode但它也没有工作 – Dabrorius 2012-03-28 15:26:57