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....
La fonction ReadWord marche très bien, je l'utilise ailleurs sans problème.
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; }
Le hic c'est quand je debug avec gdb j'ai une erreur de segmentation
sur une instruction du genre :
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 ?
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
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
Partager