0

なぜこれが私が使用している場所と私のコードでstackover flow起こっているのですか。私を助けてください。fflushfree

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;
4

2 に答える 2

8

_tmain()関数から無条件に関数を呼び出しているため_tmain()、無限再帰が発生します。すべての呼び出しでスタックにスペースを割り当てる必要があり (解放されることはありません)、StackOverflow 例外が発生します。たとえばウィキペディアを見て、問題を完全に理解してください。

それとは別に、main()独自のコードから関数を呼び出すことは、標準で禁止されているため、通常はお勧めできません。

§3.6.1.3: 関数 main はプログラム内で使用してはならない。

なぜそれをする必要があるのですか?

于 2012-09-05T06:37:39.577 に答える
1

システムはスタック上の変数用にメモリを必要とします。スタック変数を割り当てました。それらは再帰呼び出しごとにメモリを占有します。また、すべての再帰呼び出しでリターンポインターを格納するためのメモリも必要です。

于 2012-09-05T06:37:39.173 に答える