Bonjour,
Je constate un phénomène bizarre

J'ai écrit un code qui alloue 500000 pointers et un pointers de 700Mb, bref.

Les 700Mb sont allouer avec succés si je n'ai pas allouer les 500Ko de pointers.
L'allocation des 700Mb echoue si j'ai allouer les 500Ko Pointers car il n'y à plus de place pour l'adressage
Le plus étonnant c'est que l'allocation des 700Mb échoue même si j'ai liberer les 500Ko pointers.

Je ne sais pas ce qu'il se passe pourtant je libére bien les pointers.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
void *pu[1024*500];
void CmemoryleakDlg::OnBnClickedButton1()
{
 
	int cu=1024*500;
 
	for (int i = 0 ; i < cu;i++)
	{
		__try 
		{
		//BYTE *p=new BYTE[1*1024];
		BYTE *p=(BYTE*)malloc(1024);
		memset(p,0,1024);
		pu[i]=p;
		if (p==NULL)
			p=p;
		}
		__except(MainFilterFunction(GetExceptionInformation()))
		{
		}
	}
	for (int i = 0 ; i < cu;i++)
	{
		free(pu[i]);
		//BYTE *p=(BYTE*)pu[i];
		//delete p;
	}
	BYTE *ii=new BYTE[700*1024*1024]; //CRASH EXCEPTION OUT OF MEMORY
	if (ii==NULL)
			ii=ii;
 
}
Comment faire sinon pour résoudre ce phénoméne ?
car j'ai un projet à moi qui utilise beaucoup de pointers.

Merci.