Contexte:
J'utilise Qt 3.2.1 sous Windows XP Home et 4Go de RAM dont 3 de libre.
Je fais une allocation mémoire sur un pointeur et une série d'affectation sur tous les éléments. J'entoure le tout d'un gestionnaire d'exception.
J'ai deux codes dans lesquels seuls le gestionnaire d'exception change:
1) la STL
2) Qt
Le code avec la STL s'execute correctement, il n'y a pas d'exceptions ni d'erreurs systemes.
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69 // tyth.cpp : Defines the entry point for the console application. // #include "stdafx.h" #define MAX_ITERATION 187500000 /**************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <iostream> #include <exception> int _tmain(int argc, _TCHAR* argv[]) { double * r; char c; unsigned int i = 0; try { r = new double[MAX_ITERATION]; if(r != NULL) { for( i = 0 ; i < MAX_ITERATION ; ++i) r[i] = rand(); delete [] r; } }catch(std::exception e) { std::cout << e.what() << std::endl; std::cin >> c; return 0; } return 0; } /////////////////////// Qt #include <math.h> #include <qfile.h> #include <qtextstream.h> #include <exception> int main() { double *r; unsigned int i = 0; try { r = new double[MAX_ITERATION]; if(r != NULL) { for( i = 0 ; i < MAX_ITERATION ; ++i) r[i] = rand(); delete [] r; } }catch(std::exception e) { QFile file; file.setName("SystemDebug.log"); file.open(IO_WriteOnly | IO_Append); QTextStream os(&file); os << e.what() << endl; file.close(); } }
Le code avec Qt me plante lors de l'allocation (std::bad_alloc).
Partager