为什么在我的代码中使用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("%d\n", 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("%d\n", xyz->x);
//system("pause");
free(xyz);
xyz = NULL;
fflush(stdout);
goto xyz;
答案 0 :(得分:8)
您从_tmain()
函数无条件地调用_tmain()
函数,从而导致无限递归。每个调用都需要在堆栈上分配空间(永远不会释放),从而导致StackOverflow异常。看看例如Wikipedia完全理解这个问题。
除此之外,从您自己的代码调用main()
函数通常不是一个好主意,因为标准禁止它。
§3.6.1.3:函数main不得在程序中使用。
为什么你需要这样做?
答案 1 :(得分:1)
系统需要堆栈中变量的内存,分配堆栈变量,每次递归调用占用内存。此外,它还需要内存来存储返回指针以及每次递归调用。