Programmation » [C++] Utilisation de la mémoire
Rappel du message précédent
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:20:18,
Par ovhNe jamais utiliser malloc et cie en C++ !
http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_pourquoi_new
http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_pourquoi_new
Je n'ai rien à voir avec www.ovh.com
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:22:50,
Par philfrSQL c'est mal...
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:23:50,
Par dedeLes choux de Bruxelles, c'est mal
[C++] Utilisation de la mémoire
Publié le 10/04/2006 @ 14:26:07,
Par ovh
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 15:14:50,
Par blietaeret faire un :
char *variable;
variable = row[3];
marche pas non plus, pourtant il s'afit d'un charactère des deux cotés (C++ et Mysql).
a moins que comme mysql le tape comme string, il a mis un zoli [\0] au bout?
je vais quand même pas faire un sprintf() pour un bête charactère?!
(en plus ca déborderait du *char).
char *variable;
variable = row[3];
marche pas non plus, pourtant il s'afit d'un charactère des deux cotés (C++ et Mysql).
a moins que comme mysql le tape comme string, il a mis un zoli [\0] au bout?
je vais quand même pas faire un sprintf() pour un bête charactère?!
(en plus ca déborderait du *char).
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:07:30,
Par AltarSi mysql renvoye des cstring, tu auras le \0 à la fin. En plus, je ne sais pas de quel type est ton tableau row mais ce que tu as écris me fait peur...
En supposant que row est de type char ** alors tu assignes l'addresse du pointeur variable à celle du pointeur row ce qui veut dire que row[3] et variable pointent vers la même zone mémoire, donc le même string. Donc un cout << row[3] << endl; ou un cout << variable << endl; revient à la même chose.
D'ailleurs un cout << row[3] << endl; t'affiches quoi ?
Si tu voulais copier ton string se trouve dans row[3], tu devrais d'abord allouer la mémoire pour variable en faisant variable = new char[strlen(row[3]+1)]; et ensuite y recopier le contenu en faisant strcpy(variable,row[3]); strcpy étant dans la librairie cstring.
En supposant que row est de type char ** alors tu assignes l'addresse du pointeur variable à celle du pointeur row ce qui veut dire que row[3] et variable pointent vers la même zone mémoire, donc le même string. Donc un cout << row[3] << endl; ou un cout << variable << endl; revient à la même chose.
D'ailleurs un cout << row[3] << endl; t'affiches quoi ?
Si tu voulais copier ton string se trouve dans row[3], tu devrais d'abord allouer la mémoire pour variable en faisant variable = new char[strlen(row[3]+1)]; et ensuite y recopier le contenu en faisant strcpy(variable,row[3]); strcpy étant dans la librairie cstring.
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:15:40,
Par zionSinon la gestion de string en pascal, c'est facile
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 17:35:38,
Par AltarLes strings c++ aussi
Blietaer > une solution serait aussi de simplement les copier dans des strings c++ qui sont quand même largement plus facile à utiliser. ex: std::string x = row[3];
Blietaer > une solution serait aussi de simplement les copier dans des strings c++ qui sont quand même largement plus facile à utiliser. ex: std::string x = row[3];
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 19:05:40,
Par pipoLes choux de Bruxelles, c'est mal
La testostérone, c'est male.
./Make sex | ( . ) ( . ) | Je n'ai rien à voir avec Zion l'informaticien gay
[C++] Utilisation de la mémoire
Publié le 14/04/2006 @ 20:23:46,
Par antpLes strings c++ aussi
Ouais surtout quand tu dois sans arrête passer de CString à std::string, ou de AnsiString à std::string
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
[C++] Utilisation de la mémoire
Publié le 15/04/2006 @ 14:01:20,
Par Altarla méthode c_str() permet un fallback vers les cstring très facilement... je ne vois vraiment pas le problème.
De plus si tu perds un peu de temps à te faire un api pour le réseau (d'ailleurs ça doit se trouver déjà tout fait) tu es presque totalement débarassé des cstring...
De plus si tu perds un peu de temps à te faire un api pour le réseau (d'ailleurs ça doit se trouver déjà tout fait) tu es presque totalement débarassé des cstring...
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 00:10:00,
Par antpÇa m'avait pas semblé super pratique les quelques fois où j'ai dû utiliser des chaînes en C++ Il y avait toujours un moment où j'avais des chaînes des deux types et je devais passer de l'un à l'autre.
Mais bon, je dis ça en comparaison des chaînes en Delphi. C'est sûr que par rapport aux char* les chaînes en C++ sont très pratiques
Et pour l'histoire d'API réseau, je vois pas le rapport
Dernière édition: 16/04/2006 @ 00:17:51
Mais bon, je dis ça en comparaison des chaînes en Delphi. C'est sûr que par rapport aux char* les chaînes en C++ sont très pratiques
Et pour l'histoire d'API réseau, je vois pas le rapport
Dernière édition: 16/04/2006 @ 00:17:51
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 12:19:36,
Par AltarEt bien le rapport c'est que c'est le seul moment où j'ai vraiment eu besoin d'utiliser des char* c'est lors du développement réseau Pour le reste on trouve facilement des API C++ qui utilise directement les iostream de c++ (pas forcement comme il faudrait, j'ai vu pas mal d'api qui recevait le char* et qui le castait en string mais au moins ils ont fait l'effort de faire une interface).
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 17:51:25,
Par antpOuais enfin tout le GUI de C++Builder est en AnsiString, tout celui des MFC en CString, donc quand tu veux utiliser des std::string (parce que par exemple une lib en a besoin) tu dois forcément faire des conversions.
Sinon j'ai trouvé l'utilisation de tous ces types de chaînes moins pratiques que celles de Delphi, même sans les problèmes de conversion d'un type à l'autre...
Sinon j'ai trouvé l'utilisation de tous ces types de chaînes moins pratiques que celles de Delphi, même sans les problèmes de conversion d'un type à l'autre...
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 19:03:37,
Par AltarOuais en même temps .net 1.1 est entièrement en iostream Faut vivre avec son temps.
[C++] Utilisation de la mémoire
Publié le 16/04/2006 @ 19:44:56,
Par zionantp for president
Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop
Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop
Je suis le Roy
[C++] Utilisation de la mémoire
Publié le 17/04/2006 @ 18:33:24,
Par antpOuais en même temps .net 1.1 est entièrement en iostream Faut vivre avec son temps.
Ça me fait une belle jambe, le seul code C++ que j'ai à faire au boulot c'est en Visual C++ 5 et Builder C++ 5
Puis ça ne change rien au fait que JE trouve que les chaînes Delphi sont plus pratiques. Qu'elles le soient ou non ça je n'en sais rien, c'est un avis personnel subjectif émis par moi-même
mes programmes ·· les voitures dans les films ·· champion des excuses bidons
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 11:25:53,
Par blietaeroublions l'aspect des tables et des DB..
Dans le main:
Autocar *bus = new Autocar[NOMBRE_DE_BUS_MAX];
Pat *patrouilles = new Pat[NOMBRE_DE_PAT_TOTAL];
init_all(bus, patrouilles);
"int init_all(Autocar *bus, Pat *patrouilles)" est juste une fonction qui va faire des "for(;;)" pour remplir les objects avec des données extraites de MySQL (ou autre DB).
Et elle le fait bien...:
this->numero_bus = numero;
this->capacite = strtol(row[4],&pEnd,0);
this->zone_depart = row[2];
this->CDZ_arrive = strtol(row[3],&pEnd,0) ;
Ma classe autocar:
Par contre, une fois l'object inspecté dans main(),
printf("le bus #3 part de %s avec %d personnes vers %d\n",bus[3].zone_depart, bus[3].capacite,bus[3].CDZ_arrive);
--> le bus #3 part de def avec 72 personnes vers 3
et "def" devrait être plutôt une lettre majuscule (ici en locurence "W")
Pourquoi?
espérons que j'ai été clair...
Dans le main:
Autocar *bus = new Autocar[NOMBRE_DE_BUS_MAX];
Pat *patrouilles = new Pat[NOMBRE_DE_PAT_TOTAL];
init_all(bus, patrouilles);
"int init_all(Autocar *bus, Pat *patrouilles)" est juste une fonction qui va faire des "for(;;)" pour remplir les objects avec des données extraites de MySQL (ou autre DB).
Et elle le fait bien...:
this->numero_bus = numero;
this->capacite = strtol(row[4],&pEnd,0);
this->zone_depart = row[2];
this->CDZ_arrive = strtol(row[3],&pEnd,0) ;
Ma classe autocar:
class Autocar {
public:
int numero_bus;
int capacite;
char *zone_depart;
int CDZ_arrive;
int places_restantes;
char *troupes_presentes[10][5];
int nbre_troupes_presentes;
Autocar(void);
~Autocar(void);
int init_autocar(int numero);
int ajouter_patrouille(int pat_id);
};
public:
int numero_bus;
int capacite;
char *zone_depart;
int CDZ_arrive;
int places_restantes;
char *troupes_presentes[10][5];
int nbre_troupes_presentes;
Autocar(void);
~Autocar(void);
int init_autocar(int numero);
int ajouter_patrouille(int pat_id);
};
Par contre, une fois l'object inspecté dans main(),
printf("le bus #3 part de %s avec %d personnes vers %d\n",bus[3].zone_depart, bus[3].capacite,bus[3].CDZ_arrive);
--> le bus #3 part de def avec 72 personnes vers 3
et "def" devrait être plutôt une lettre majuscule (ici en locurence "W")
Pourquoi?
espérons que j'ai été clair...
Et au besoin s'arrêter.
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 11:54:16,
Par ovhDes char* et des printf dans un programme C++
Faudrait pas plutôt faire un strcpy + initialisation mémoire ?
Dernière édition: 27/04/2006 @ 11:54:45
this->zone_depart = row[2];
Faudrait pas plutôt faire un strcpy + initialisation mémoire ?
this->zone_depart = new char[strlen(row[2])];
strcpy(this->zone_depart, row[2]);
strcpy(this->zone_depart, row[2]);
Dernière édition: 27/04/2006 @ 11:54:45
Je n'ai rien à voir avec www.ovh.com
[C++] Utilisation de la mémoire
Publié le 27/04/2006 @ 12:00:37,
Par AltarJe suis d'accord avec ovh pour l'allocation de la mémoire mais mon petit ovh où mets-tu le '\0' ?? C'est strlen(row[2]+1);