begin process at 2012 05 30 22:54:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Visual C++ Free()


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Visual C++ Free()

jeudi 4 septembre 2003 à 22:00:51 | Visual C++ Free()

PRZYBYLSKI

#include <windows.h>
#include <stdio.h>
#include "stdafx.h"
Question au Pro?
Qu'es qui est faux docteur
Arrivé à free ça bombe

#include <iostream.h>
#include <stdlib.h>
#include <malloc.h>


void main(int argc, char* argv[])
{
char *string="free";
cout << string << endl;
system("PAUSE"); // ici tout est OK

free((char*)string);// Arrivé ici ça merde

cout << "Bravo ça marche" << endl;

cout << string << endl;

system("PAUSE");
}
jeudi 4 septembre 2003 à 22:43:35 | Re : Visual C++ Free()

BruNews

Administrateur CodeS-SourceS
Pour sur que doit merder, free() ne s'applique qu'aux allocations faites avec malloc. Ici *string pointe sur une constante chaine !!!
BruNews, ciao...


-------------------------------
Réponse au message :
-------------------------------

> #include <windows.h>
> #include <stdio.h>
> #include "stdafx.h"
> Question au Pro?
> Qu'es qui est faux docteur
> Arrivé à free ça bombe
>

> #include <iostream.h>
> #include <stdlib.h>
> #include <malloc.h>
>
>
> void main(int argc, char* argv[])
> {
> char *string="free";
> cout << string << endl;
> system("PAUSE"); // ici tout est OK
>
> free((char*)string);// Arrivé ici ça merde
>
> cout << "Bravo ça marche" << endl;
>
> cout << string << endl;
>
> system("PAUSE");
> }
>

jeudi 4 septembre 2003 à 22:56:01 | Re : Visual C++ Free()

blopera

Slt

éh éh! free sans malloc... voilà pourquoi ça cloche!

tu n'as jamais alloué ton char*string... tu lui as juste affecté une adresse!

Bertrand

-------------------------------
Réponse au message :
-------------------------------

> #include <windows.h>
> #include <stdio.h>
> #include "stdafx.h"
> Question au Pro?
> Qu'es qui est faux docteur
> Arrivé à free ça bombe
>

> #include <iostream.h>
> #include <stdlib.h>
> #include <malloc.h>
>
>
> void main(int argc, char* argv[])
> {
> char *string="free";
> cout << string << endl;
> system("PAUSE"); // ici tout est OK
>
> free((char*)string);// Arrivé ici ça merde
>
> cout << "Bravo ça marche" << endl;
>
> cout << string << endl;
>
> system("PAUSE");
> }
>

jeudi 4 septembre 2003 à 23:43:25 | Re : Visual C++ Free()

PRZYBYLSKI

Au faite entre temps j'ai trouvé.
Mais j'ai un mal fou a comprendre car selon mon exemple :
Aidez moi a comprendre (au bout il y a sûrement la lumière)

char *string="free"; // ici on alloue une adresse soit, mais l'adresse de qui
len = strlen(string); //Ici la longueur est de 4
cout << string << endl; //print le contenu de string (free)
cout << len << endl; //print le contenu de len soit 4
system("PAUSE");

string = (char*) malloc( 1 ); Ici on rajoute 1 à la longueur
len =strlen(string);// Ici la longueur est de 5
cout << string << endl; // Mais ici c'est n'importe quoi comme txt
cout << len << endl; //Ici la longueur est de 5
system("PAUSE");

free((char*)string); // Ici on libere mais quoi
len =strlen(string);// L'espace reserve est toujours de 5
cout << string << endl;// Ici on voit que les caractères sont identique
cout << len << endl; Ici la longueur est de 5
system("PAUSE");

string = (char *)calloc( 1, sizeof( char ) );// Ici la reservation memoire disparaît
len =strlen(string); );// L'espace réserve est à 0

cout << string << endl; il y a plus rien
cout << len << endl;
system("PAUSE");

Résumer je ne vois très bien a quoi cela sert à reformater la mémoire j'imagine que tous les octet passe à 0.

On peut simplement remplacer par d'autre valeur. Mais ou j'ai loupé qlq chose ou ?? mais la mémoire reste alloué à la variable après free()

Voilà une réponse qui me met dans cette etat.
> Si la dll doit retourner un ptr de chaine faisant concat de ce qu'elle reçoit + ce qu'elle ajoute, faudra allouer la memoire dans la dll pour garantir la longueur necessaire au chainage.
> La dll retourne un char* que le prog affiche et ensuite fait le free(ptr).
> BruNews, ciao...
-------------------------------
Réponse au message :
-------------------------------
> Question au Pro?
> Qu'es qui est faux docteur
> Arrivé à free ça bombe
>

> #include <iostream.h>
> #include <stdlib.h>
> #include <malloc.h>
>
>
> void main(int argc, char* argv[])
> {
> char *string="free";
> cout << string << endl;
> system("PAUSE"); // ici tout est OK
>
> free((char*)string);// Arrivé ici ça merde
>
> cout << "Bravo ça marche" << endl;
>
> cout << string << endl;
>
> system("PAUSE");
> }
>

vendredi 5 septembre 2003 à 00:23:24 | Re : Visual C++ Free()

Kaid

Le résultat que tu cherches à obtenir est-il celui là:

DLL:


#define STR_PREFIXE "prefixe"

char* mafonction(const char* inStr)
{
// Taille de la chaine finale
int tailleStr=strlen(inStr) + strlen(STR_PREFIXE) + 1;

// Allocation
char* outStr=new char [tailleStr];

strcpy(outStr, STR_PREXIFE);
strcat(outStr, inStr);

return outStr;
}


Programme de test:

char* inStr="chaine sans prefixe";
char* outStr=mafonction(inStr);

cout << outStr << endl;

// ...

delete [] outStr;


Kaid - kaid.fr.st

-------------------------------
Réponse au message :
-------------------------------

> Au faite entre temps j'ai trouvé.
> Mais j'ai un mal fou a comprendre car selon mon exemple :
> Aidez moi a comprendre (au bout il y a sûrement la lumière)
>
> char *string="free"; // ici on alloue une adresse soit, mais l'adresse de qui
> len = strlen(string); //Ici la longueur est de 4
> cout << string << endl; //print le contenu de string (free)
> cout << len << endl; //print le contenu de len soit 4
> system("PAUSE");
>
> string = (char*) malloc( 1 ); Ici on rajoute 1 à la longueur
> len =strlen(string);// Ici la longueur est de 5
> cout << string << endl; // Mais ici c'est n'importe quoi comme txt
> cout << len << endl; //Ici la longueur est de 5
> system("PAUSE");
>
> free((char*)string); // Ici on libere mais quoi
> len =strlen(string);// L'espace reserve est toujours de 5
> cout << string << endl;// Ici on voit que les caractères sont identique
> cout << len << endl; Ici la longueur est de 5
> system("PAUSE");
>
> string = (char *)calloc( 1, sizeof( char ) );// Ici la reservation memoire disparaît
> len =strlen(string); );// L'espace réserve est à 0
>
> cout << string << endl; il y a plus rien
> cout << len << endl;
> system("PAUSE");
>
> Résumer je ne vois très bien a quoi cela sert à reformater la mémoire j'imagine que tous les octet passe à 0.
>
> On peut simplement remplacer par d'autre valeur. Mais ou j'ai loupé qlq chose ou ?? mais la mémoire reste alloué à la variable après free()
>
> Voilà une réponse qui me met dans cette etat.
> > Si la dll doit retourner un ptr de chaine faisant concat de ce qu'elle reçoit + ce qu'elle ajoute, faudra allouer la memoire dans la dll pour garantir la longueur necessaire au chainage.
> > La dll retourne un char* que le prog affiche et ensuite fait le free(ptr).
> > BruNews, ciao...
> -------------------------------
> Réponse au message :
> -------------------------------
> > Question au Pro?
> > Qu'es qui est faux docteur
> > Arrivé à free ça bombe
> >

> > #include <iostream.h>
> > #include <stdlib.h>
> > #include <malloc.h>
> >
> >
> > void main(int argc, char* argv[])
> > {
> > char *string="free";
> > cout << string << endl;
> > system("PAUSE"); // ici tout est OK
> >
> > free((char*)string);// Arrivé ici ça merde
> >
> > cout << "Bravo ça marche" << endl;
> >
> > cout << string << endl;
> >
> > system("PAUSE");
> > }
> >

>


Cette discussion est classée dans : string, include, char, cout, free


Répondre à ce message

Sujets en rapport avec ce message

Dans le genre prenant........ [ par Xs ] oui !c 'est trés chiant !j'explique mon pb : j'ai un code source, fais par moi-meme, et dedans, je veux que l'on saisisse des renseignement comme le l j'ai commencé un sof mais je bloque ! :( [ par xionoxid ] Voilà quand je demande rentré le pass si il met "a" alors ça devrait faire login = rien; mais le probleme c'est que meme si je met a et ça fait PAS lo probleme creation de tableaux à taille dynamique [ par veka61 ] Bonjour tout le monde,Voila j'essai depuis plusieurs jour de creer une fonction pour transformer un string en char seulement j'obtient une erreur que Différence char - string [ par herlockg ] Bonjour,Voilà, je me demandais quelle était la différence exacte entre le type string et le type char. De plus, il pourquoi n'est-il pas nécessaire d' La class string [ par jderf ] Je suis débutant et je teste la class string. Voici un code tous simple, mais y'a un probleme de conversion à la compil que je ne comprend pas. Les er SOS kk1 svp [ par MarouIF3 ] S'il vous plait est-ce que quelqu'un peut m'aider à déterminer pourquoi ce programme "se plante" lors de l'exécution.? Merci, ça sera très gentil... # String et char [ par lektrosonic ] Bonjour,Peut on extraire un char souhaite d'un string ?Mercil3KTr0 Was HeRe Etendre std::string(char *) pour utiliser nos references de char[] a l'interne [ par ebeaumier ] Bonjour,Je dois appeler une API externe qui ne prend que des "const string &" et nous utilisons a l'interne des char[].Est-il possible d'étendre la cl comment gerer ce projet pour que deux etudiants n'aient pas le meme code [ par desco182 ] Salut a tous j'aimerais bien que quelqu'un m'aide .#include#include#include#ifndef ETUDIANT_H#define ETUDIANT_Hclass etudiant{int code;<br / Client(c++Builder)/Serveur(linux) [ par willixs ] Bonjour j'ai fait un socket client sur c++ builder et un serveur socket sur linux mais j'ai un probleme c'est que j'ai créé un tableau de caractères s


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,373 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales