Bonjour,
j'apprends actuellement le C en cours et j'ai eu un petit projet à faire, un programme qui coderait et décoderait du morse en langage clair.
J'en ai déjà fait un petit bout mais je suis bloqué depuis un bon moment et le prof un peu de mal à m'aider ...
voici la fonction en question
Code :
- char* encoderString(char *phrase)
- {
- unsigned int i;
- char resultat[MAX_CARACTERES_PAR_LIGNE] ="";
- for (i=0;i<strlen(phrase);++i)
- {
- strcat(resultat,encoderChar(phrase[i]));
- }
- return resultat;
- }
|
et le main :
Code :
- int main(int argc, char *argv[])
- {
- char *test = "ABCDEFGHIJKLMNOPQR";
- printf("%s",encoderString(test));
- char c = getchar();
- return 0;
- }
|
le problème est que si j'ai bien compris, le ta'bleau "resultat" que j'ai créé dans la fonction est détruit dès qu'on quitte la fonction.
J'ai vu sur le net que procéder à une allocation dynamique du tableau pourrait peut-être le faire perdurer dans la main ...
j'ai donc remplacé la déclaration :
Code :
- char resultat[MAX_CARACTERES_PAR_LIGNE] ="";
|
par
Code :
- char* resultat = (char*) malloc(strlen(phrase)*sizeof(char));
|
seulement voilà ...
Visual studio plante et m'affiche :
Windows has triggered a breakpoint in progMorse.exe.
This may be due to a corruption of the heap, which indicates a bug in progMorse.exe or any of the DLLs it has loaded.
This may also be due to the user pressing F12 while progMorse.exe has focus.
The output window may have more diagnostic information.
mon prof m'a fait mettre un "static" devant la déclaration du tableau pour se rendre compte du problème mais ce n'est pas une solution très propre je trouve ...
Au cas ou l'un d'entre vous ait un bon éclaircissement à me fournir, je suis preneur