2016-07-13 11 views
-2

メモリリークをシミュレートする簡単なCプログラムを作成しました。しかし、私はそれを実行しようとするとクラッシュします。WindowsでシンプルなCプログラムがクラッシュする

#include <stdio.h> 
#include <stdlib.h> 

void memory_leak(void); 

int main() 
{ 
    memory_leak(); 
    return EXIT_SUCCESS; 
} 

void memory_leak() 
{ 
    int i = 100; 
    memory_leak(); 
} 

私はMinGW gccコンパイラを使用します。

+2

あなたはそれが何を期待していましたか? – immibis

+1

無限ループはそれをする傾向があります – Idos

+4

'memory_leak()'を 'stackoverflow()'にリネームします:) – pah

答えて

2

関数をmemory leakに再帰的に呼び出すことで、スタックオーバーフローが発生しています。

ご使用のバージョンのmemory_leakは、関数の終了時に解放/破棄/割り当て解除されるローカル(「スタック」)変数を割り当てます。

実際にメモリリークを作成するには、ヒープからメモリを割り当てる必要があります(たとえば、newまたはmallocを使用)。

void* memory_leak() 
{ 
    return malloc(10); 
} 

[無条件memory_leakmemory_leakを呼び出さないでください。]

+0

ありがとう、それは私が実際に望んだものでした。 – Warix3

+0

しかし、それは2,035.1 MBで停止しました。そのプログラムや何かのためのシステムの制限ですか?私はまだ4.3 GBの空きメモリがあるからです。 – Warix3

+0

どのオペレーティングシステムをテストしていますか? –

関連する問題