为什么stackover flow
发生在我在代码中使用fflush
和free
的地方。请帮帮我。
using namespace std;
struct abc{
int x;int y;
}abc;
int _tmain(int argc, _TCHAR* argv[])
{
struct abc *xyz = (struct abc *) malloc(sizeof(struct abc));
xyz->x = 5;
printf("%dn", xyz->x);
//system("pause");
free(xyz);
// xyz = NULL;
fflush(stdout);
_tmain(NULL, NULL);
return 0;
}
编辑代码:
xyz:
struct abc *xyz = (struct abc *) malloc(sizeof(struct abc));
xyz->x = 5;
printf("%dn", xyz->x);
//system("pause");
free(xyz);
xyz = NULL;
fflush(stdout);
goto xyz;
您从_tmain()
函数中非一致地调用_tmain()
函数,导致无限递归。每个调用都需要在堆栈上分配空间(永远不会释放),从而导致StackOverflow异常。看看维基百科(Wikipedia)就知道这个问题太全面了。
除此之外,从自己的代码中调用main()
函数通常不是一个好主意,因为这是标准所禁止的。
§3.6.1.3:不得在程序中使用功能主体。
你为什么要这么做?
系统需要堆栈上变量的内存,您分配了堆栈变量,这些变量每次递归调用都会占用内存。此外,它还需要内存来存储每个递归调用的返回指针。