IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Erreur lors d'allocations


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut Erreur lors d'allocations(STL/Qt)
    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

    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 la STL s'execute correctement, il n'y a pas d'exceptions ni d'erreurs systemes.
    Le code avec Qt me plante lors de l'allocation (std::bad_alloc).

  2. #2
    Membre habitué Avatar de galak63
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 146
    Points
    146
    Par défaut
    c'est sur quelle variable qu'il y a la violation mémoire ?
    Le plus dur dans la mort, c'est qu'on loupe l'apéro ...
    www.usirugby.rf.lv

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 77
    Points : 39
    Points
    39
    Par défaut
    Croyant que c'était une vulgaire erreur de C++, j'ai voulu effacer ce sujet et le mettre dans la partie C++.

    Finalement, j'ai pu cerner le probleme. J'ai réécris la question.
    Je ne comprends pas pourquoi l'allocation se passe mal alors que la seule difference se trouve apres l'erreur.

    Sans doute que l'utilisation de la librarie Qt consome plus de memoire, ce qui me restreint sur les 2Go possible (limitation XP). Mais si on met MAX_ITERATION à 90000000 (soit 720Mo), j'ai encore cette erreure d'allocation. La librarie ne prends quand meme pas plus de 1Go!

Discussions similaires

  1. Erreur lors de l allocation de Vector
    Par harsh dans le forum SL & STL
    Réponses: 4
    Dernier message: 21/05/2006, 18h11
  2. Erreur lors de l'execution d'un script jsp
    Par tuxor dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 06/08/2004, 12h35
  3. Erreur lors de la connexion
    Par mathll65 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/03/2004, 17h46
  4. Erreur lors de modification d'une table
    Par seb.49 dans le forum SQL
    Réponses: 11
    Dernier message: 13/01/2003, 17h16
  5. [VB6] Erreur lors de l'ouverture d'un document Word
    Par Marco le Pouillot dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2003, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo