begin process at 2010 03 20 01:34:51
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Fichier & Disque

 > 

erreur mémoire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

erreur mémoire

vendredi 30 novembre 2007 à 10:35:41 | erreur mémoire

Mitch986

Bonjour,

Je suis face à un problème de mémoire je pense. En effet, je cherche à écrire une fonction qui liste les dossiers d'un répertoire. J'ai fait 3 fonctions, dont les algos sont bons (testés) mais je ne peux jamais récupérer la liste dans mon programme principal. Voici la première que j'ai faite (elle prend en paramètre une chaine de type AWR_String nommée Shd_Folder_Path et renvoie une liste de type AWR_Shd_ShaderList) :

    char* Path;
    Path = StringToChar (Shd_Folder_Path); // We need to manipulate char* variables so we change Shd_Folder_Path into a char*
    strcat(Path,"\\*"); // To go in the Shaders folder
    bool bRestart=false;

Restart:

    WIN32_FIND_DATA wData;
    HANDLE listing;
    listing=FindFirstFile(Path,&wData);
    AWR_Shd_ShaderList Temp_Folders_List;
    if (listing==INVALID_HANDLE_VALUE)
        return Temp_Folders_List;
   
    int bList=true;

    while(bList) // While there is Folder in the Folder Path
    {
        if(wData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // Check if the it's a Folder
        {
            if(strcmp(wData.cFileName,".")!=0 && strcmp(wData.cFileName,"..")!=0 && !bRestart)
            {
                // We add the Folder to the List of Folders
                AWR_Shd_ShaderBase* New_Folder = new AWR_Shd_ShaderBase (CharToString(wData.cFileName));
                Temp_Folders_List.Add_Shader(New_Folder);
            }
        }
        bList=FindNextFile(listing,&wData); // We go to the next File of the Directory Path
    }
    FindClose(listing);
    if(!bRestart)
    {       
        bRestart=true;
        goto Restart;   
    }
    return Temp_Folders_List;

Tout se passe bien avant le "
if(!bRestart)" qui retourne au Restart et recrée la liste, donc écrase l'ancienne. Quand il arrive au return, il me renvoie donc la deuxième liste, qui est vide. Le truc, c'est que quand je cherche à déplacer le return ou même la déclaration de la liste, mon programme plante sur une erreur de mémoire, un truc genre 0x00005. Là je ne sais plus quoi faire. Je vous mets dessous la déclaration de Add_Shader car c'est elle qui fait planter dans mes autres fonctions :

void AWR_Shd_ShaderList::Add_Shader (AWR_Shd_ShaderBase * Shader_Base)
{
    this->Current_Shader_List = this->First_Shader_List;
    if (Current_Shader_List == NULL)
    {   
        this->Current_Shader_List = Shader_Base;
        this->First_Shader_List = Shader_Base;
    }
    else
    {
        while (Current_Shader_List->AWR_Next_Shader != NULL)
        {   
            this->Current_Shader_List = this->Current_Shader_List->AWR_Next_Shader;
        }
        this->Current_Shader_List->AWR_Next_Shader = Shader_Base;
    }
}

Merci de m'aider, peu importe les changements que je fais, ça plante le programme ! A L'AIDE !!

samedi 1 décembre 2007 à 12:06:50 | Re : erreur mémoire

juju12

Réponse acceptée !
C'est toi qui a codé la classe AWR_Shd_ShaderList? Et dans ce cas, as-tu implémenté un constructeur de copie?
Parce que quand tu fais return Temp_Folders_List, la variable Temp_... est détruite (puisque déclarée dans la fonction) et une copie est faite dans le code d'où tu as appelé la fonction. Si tu n'a pas implémenté de constructeur de copie, le compilateur en mettra un par défaut, mais il va pas marcher super : il se contente de recopier les données...sauf que toi dans ces données tu avais des pointeurs, donc ceux-ci ne sont plus valides après retour de la fonction et destruction de Temp_...(je suppose que tu libères la mémoire dans le destructeur), par conséquent bug quand tu tentes d'accéder aux données.


Cette discussion est classée dans : list, folder, shader, awr, shd


Répondre à ce message

Sujets en rapport avec ce message

Problème con... [ par Mitch986 ] Bonjour,Comme vous allez le voir je débute en C++ et je suis face à un problème. Voici la fonction en question :AWR_Shd_ShaderBase* AWR_Shd_ShaderList Vérification dossier [ par Mitch986 ] Bonjour !Je souhaiterai savoir si un fichier existe, j'ai pour le moment le code suivant :bool AWR_Shd_ShaderManager::Has_Shaders_Path (AWR_String Shd list et class - tri sur les pointeur [ par DroledeBx ] Bonsoir, j'ai un problème avec une list. J'ai définit une class fiche. J'ai une list de pointeur vers des fiches. Je voudrais trier cette list. Avec s list (STL) de tableau [ par BozzoDodo ] Bonjour,j'aurais voulu créer une list de tableau.Je m'explique... en gros chaque élément de la liste possède 3 éléments (3 int par exemple).Mon code e Listview [ par akalys ] Re bonjour ^^ J'aurais une petite question a propos des listview. Je suis novice et j'ai suivuit un tuto pour créer un MFC. Ou dois je mettre mon co liberer un emplaceemnt dans une "list" en c++ sans supprimer l'objet [ par timy94 ] BonjourVoici mon codeCEvenement & MyClasse::Get_Evt(){       list ::iterator pEvt;       list ::iterator pListEvt = m_Liste_Evt.begin();        pEvt List View Drag'n'drop [ par K_3 ] Bonjour,J'ai une listview qui est similaire à une listbox mais contenant plusieurs colonnes,je me demandais comment je pourrai procéder pour que la li problem (bug) [ par gabsi08aymen ] bonsoir, en fait, j ai un mini projet a faire qui consiste a gerer un forum de disscussion en c on a 3 fichiers .txt un ki contien la liste des adhere visu d'une structure [ par toni93330 ] Bonjour,Voila mon problème :j'utilise visual studio 2005 et le framework .NET. Dans mon programme principale j'inclus un fichier de définition qui con


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,296 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales