0

以下のコードでは、malloc 呼び出しを while ループに入れています。

int main()
{
    int *ptr;
    while(1) { 
        ptr=malloc(1000);
        if (ptr == NULL) break;
    }
    return (0);
}

ヒープにスペースが残るまで実行しますwhile loopか、それとも、割り当てられたメモリにデータを書き込んでいないため、強制終了されない限り、永久に実行し続けますか? もちろん、上記の質問に答えることができるように意図されたメモリ リークがあります。

4

2 に答える 2

2

特定の繰り返しの後、malloc失敗します。malloc の戻り値をチェックしないため、ループを中断するものは何もありません。

したがって、無限ループになります。


あなたの中断により、mallocがNULLを返すと、最終的にループから抜け出します。すでに述べたように、メモリリークがあります。通常、プログラムが終了すると、OS はすべてのメモリを要求します。ただし、free適切に行うことをお勧めします。

于 2012-10-26T17:19:12.747 に答える
0

プロセスは最終的に制限 (プロセス制限、ユーザー制限、ディスク制限) に達し、正常に終了します。それはおそらくあなたのハードディスクをスラッシングし、システムの残りの部分はかなりの時間停止するでしょう.

メモリを使用する場合、OS はイチジクを与えません。

やがて回復します。しかし、なぜこの愚かなことをするのですか?

于 2012-10-26T17:38:09.000 に答える