Sujet: [C++] Utilisation de la mémoire
10/04/2006 @ 14:20:18: ovh: [C++] Utilisation de la mémoire
Ne jamais utiliser malloc et cie en C++ !
http://c.developpez.com/faq/cpp/?page=pointeurs#POINTEURS_pourquoi_new
10/04/2006 @ 14:22:50: philfr: [C++] Utilisation de la mémoire
SQL c'est mal... :oh:
10/04/2006 @ 14:23:50: dede: [C++] Utilisation de la mémoire
Les choux de Bruxelles, c'est mal :oh:
10/04/2006 @ 14:26:07: ovh: [C++] Utilisation de la mémoire
SQL c'est mal... :oh:

L'informatique c'est mal :itm:
14/04/2006 @ 15:14:50: blietaer: [C++] Utilisation de la mémoire
et 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).
14/04/2006 @ 17:07:30: Altar: [C++] Utilisation de la mémoire
Si 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.
14/04/2006 @ 17:15:40: zion: [C++] Utilisation de la mémoire
Sinon la gestion de string en pascal, c'est facile :oh:

:neowen:
14/04/2006 @ 17:35:38: Altar: [C++] Utilisation de la mémoire
Les strings c++ aussi :oh:

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];
14/04/2006 @ 19:05:40: pipo: [C++] Utilisation de la mémoire
Les choux de Bruxelles, c'est mal :oh:

La testostérone, c'est male.
14/04/2006 @ 20:23:46: antp: [C++] Utilisation de la mémoire
Les strings c++ aussi :oh:

Ouais surtout quand tu dois sans arrête passer de CString à std::string, ou de AnsiString à std::string :dawa:
15/04/2006 @ 14:01:20: Altar: [C++] Utilisation de la mémoire
la 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...
16/04/2006 @ 00:10:00: antp: [C++] Utilisation de la mémoire
Ça m'avait pas semblé super pratique les quelques fois où j'ai dû utiliser des chaînes en C++ :spamafote: 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 :oh:

Et pour l'histoire d'API réseau, je vois pas le rapport :confused:
16/04/2006 @ 12:19:36: Altar: [C++] Utilisation de la mémoire
Et 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 :wink: 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).
16/04/2006 @ 17:51:25: antp: [C++] Utilisation de la mémoire
Ouais 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...
16/04/2006 @ 19:03:37: Altar: [C++] Utilisation de la mémoire
Ouais en même temps .net 1.1 est entièrement en iostream :smile: Faut vivre avec son temps.
16/04/2006 @ 19:44:56: zion: [C++] Utilisation de la mémoire
antp for president :oh:

Y a que pour l'unicode ou il faut implicitement transformer le type si tu veux pas que ca foire trop :joce:
17/04/2006 @ 18:33:24: antp: [C++] Utilisation de la mémoire
Ouais en même temps .net 1.1 est entièrement en iostream :smile: 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 :ddr555:
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 :oh:
27/04/2006 @ 11:25:53: blietaer: [C++] Utilisation de la mémoire
oublions 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:
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);


};


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...
27/04/2006 @ 11:54:16: ovh: [C++] Utilisation de la mémoire
Des char* et des printf dans un programme C++ :totoz: :ciler: :fumer:

this->zone_depart = row[2];

Faudrait pas plutôt faire un strcpy + initialisation mémoire ? :figti:
this->zone_depart = new char[strlen(row[2])];
strcpy(this->zone_depart, row[2]);
27/04/2006 @ 12:00:37: Altar: [C++] Utilisation de la mémoire
Je 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); :oh:
Retour