Probleme avec HeapAlloc()

Signaler
Messages postés
145
Date d'inscription
samedi 2 octobre 2004
Statut
Membre
Dernière intervention
21 février 2013
-
Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
-
Bonjour,

char** split_data(char* cache,int bounds)
{
char** parts=NULL;
int i=0,j=0,len=0;
len=strlen(cache);
if(bounds<=0||len==0){returnNULL;}
if(bounds>0&&len>0){parts=(char**)HeapAlloc(GetProcessHeap(),(HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY),sizeof(char*)*bounds);}
if(!parts){error(9,hwnd_main);}
parts[0]=cache;
for(i=0;i<=len;i++)
{
if(cache[i]==SEP)
{
if(j==bounds)
{
cache[i]=0;
break;
}
else
{
j++;
parts[j]=&cache[i+1];
cache[i]=0;
}
}
}

return parts;
}

Pour expliquer:


cache parameter = "Jim~Maria~George~Mike~"

SEP = `~`

bound = 4

Cette fonction doit retourner parts de type char** avec:

parts[0] = "Jim"

parts[1] = "Maria"

parts[2] = "George"

parts[3] = "Mike"


La chose etonante est que, quand j'execute mon application en clickant
sur le boutton "debug" de Visual Studio, ma fonction fonctionne
parfaitement, tansdis que j'execute mon application, soit en debug soit
en release, mon application plante:


Une fenetre de visual studio aparait, intitulee "Just-in-Time debugger" (j'ai Visual studio en anglais"

Le contenu de cette fenetre:

"An unhandled win32 exception occured in nom_de_l'application.exe [3916]


Merci

l3KTr0 Was HeRe
A voir également:

1 réponse

Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Essaye ca:

LPSTR* __stdcall SplitData(char* Data, int Separator, int MaxItems)
{
DWORD DataLen 0, i 0, j = 0;
LPSTR* Buff;
DataLen = strlen(Data);
Buff = (LPSTR*) HeapAlloc(GetProcessHeap(), (HEAP_NO_SERIALIZE|HEAP_ZERO_MEMORY), sizeof(LPSTR)*MaxItems+1);
if(!Buff) return 0;
Buff[j] = &Data[i]; j++;
while(1)
{
if(Data[i] == Separator)
{
Data[i] = 0;
Buff[j] = &Data[i+1];
if(j == MaxItems) return Buff;
j++;
}
if(i == DataLen) break;
i++;
}
return Buff;
}

int main(void)
{
char Str[] = "Jim~Maria~George~Mike~";
LPSTR* Ret;
int i, Part = 4;
Ret = SplitData(Str, '~', Part);
for(i=0; i!=Part; i++) printf("%s\n", Ret[i]);
HeapFree(GetProcessHeap(), HEAP_NO_SERIALIZE, Ret);
system("PAUSE");
return 0;
}

Neo_Fr