Ik ben bezig met een explode functie, alleen ik heb een geheugenlek, dat ik maar niet opgelost krijg.
Ik heb namelijk een array met char* die wordt gereturned, en daarna gefree'd.
Alleen als ik de afzonderlijke arrays probeer te free'en krijg ik een error.
Aanroep
Functie
Output
Hij gaat dus bij het eerste stukje (explode[0]) al fout, terwijl hij niet null is. Weet iemand hoe dit kan, en wat de oplossing kan zijn, want als ik de ene regel weg haal werkt het allemaal.
Ik heb namelijk een array met char* die wordt gereturned, en daarna gefree'd.
Alleen als ik de afzonderlijke arrays probeer te free'en krijg ik een error.
Aanroep
C:
1
2
3
4
5
6
7
8
9
10
11
12
| CCharFunctions * m_cCF = new CCharFunctions(); char tobeexploded[] = "hallo,ik,ben,een,zanger"; char seps[] = " ,\t\n"; char ** explode = m_cCF->Explode(seps,tobeexploded, 15); UINT x = _msize(explode)/sizeof(char*); for (UINT i=0; i<x;i++) if (explode[i] != NULL) { printf(explode[i]); free(explode[i]);//hier loopt het fout, zonder deze gaat het helemaal goed. } free(explode); |
Functie
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| char ** Explode (char * seperator, char * input, int limit = NULL) { if (limit==NULL) limit = 1024; char **m_cExploded = (char**)malloc(limit*sizeof(char*)); for (int j = 0; j < limit; j++) m_cExploded[j] = NULL; char *token; token = strtok(input, seperator); int i=0; while (token != NULL) { m_cExploded[i] = (char*)malloc(strlen(token)*sizeof(char)); strcpy(m_cExploded[i],token); printf( "%s\n", m_cExploded[i]); i++; token = strtok( NULL, seperator); } return m_cExploded; } |
Output
code:
1
2
3
4
5
6
| hallo ik ben een zanger halloPress any key to continue |
Hij gaat dus bij het eerste stukje (explode[0]) al fout, terwijl hij niet null is. Weet iemand hoe dit kan, en wat de oplossing kan zijn, want als ik de ene regel weg haal werkt het allemaal.