bonjour à tous, j'ai un ch'ti problème avec une classe servant à lire/écrire dans des fichiers. Cette classe est contenu dans une dll et l'ensemble fonctionne bien sauf (évidement) une fonction membre....

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
 
void
CFileIO::ReadWord(WORD *wBuf)
{
    char *szBuf = NULL;
 
    szBuf = new char[sizeof(WORD) + 1]; 
    if ( szBuf )
    {
        memset(szBuf, 0, sizeof(WORD));
        m_iofile.read(szBuf, sizeof(WORD)); 
 
        memcpy(wBuf, szBuf, sizeof(WORD)); 
        *wBuf = INVW(*wBuf);
 
         delete [] szBuf;            
     }
}        
 
void
CFileIO::ReadString(string &strBuf)
{
       WORD SizeBuf;
       int iSize;
       char *szBuf = NULL;
 
        ReadWord(&SizeBuf);
        iSize = SizeBuf;
        szBuf = new char[iSize + 2];
        if ( szBuf )
        {           
                memset(szBuf, 0, iSize + 1);                        
                m_iofile.read(szBuf, iSize);
 
                strBuf = szBuf;
        }
        delete [] szBuf;
}
La fonction ReadWord marche très bien, je l'utilise ailleurs sans problème.

Le hic c'est quand je debug avec gdb j'ai une erreur de segmentation
sur une instruction du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
    CFileIO myfile;
    string strString;
 
    '
    '  ici le code d'ouverture du fichier
    '
    myfile.ReadString(strString); // <- gdb me trouve un SIGSEGV
Voyant la simplicitée du code de la fonction ReadString je ne crois pas qu'il y est d'erreur. Alors dois-je chercher ailleurs dans mon code ?

Ayant passer quelques temps la-dessus j'ai quelques questions qui me viennent :
- dans 'szBuf = new char[iSize + 2];' le 'iSize' peut-etre de quel type (int, WORD, DWORD...) ?
- cette instruction 'strBuf = szBuf;' fonctionne par copie ou non ?
- y a-t-il une version C++ des fonctions 'memset' et 'memcpy' ?

merci d'avance de vos réponses et bonne journée à tous