Probleme de tableau entre C et C++

cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006
- 6 févr. 2004 à 19:00
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006
- 10 févr. 2004 à 20:36
Bonjour,

J'ai récupéré des codes qui semblent en C et je souahiterais les mettre en C++.
qui peut me dire si ces codes sont en C ou C++.

Matrix = (int **)malloc(size* sizeof(int *));
if (Matrix == NULL)
{
cout<<"\nEchec lors de l'allocation memoire!!!";
}
for (k=0;k<size;k++)
{
Matrix[k] = (int *)malloc(height * sizeof(int));
if (Matrix[k] == NULL)
{
for (l=0;l<k;l++)
{
free(Matrix[l]);
cout<<"\nEchec lors de l'allocation memoire!!!";
}
}
}

Merci

19 réponses

cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
6 févr. 2004 à 19:02
ce code est crade, c'est un melange de c et c++
0
cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

6 févr. 2004 à 19:42
Bonjour,

Mise a part les cout, l'allocation et la liberation de la memoire
(malloc et free) c'est du C.

Un petit probleme : L'appli verifie bien que les allocations ont reussi mais si elles echouent, le programme, mise a part un message, ne fait aucun traitement (sortie de la fonction, fin du programme ou autre chose)

Matt...
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
6 févr. 2004 à 20:17
mon dieu, decidement apres l'avoir foutu dans l'editeur j'ai vu ce que ce code faisait, c'est crade c un truc de ouf

dans la boucle for si ca a pas marcher tu libere les precedent mais tu quitte pas ce qui fait que la prochaine fois que l'allocation est impossible gros plantage!

pour finir c'est trop bizar je vois pas l'utiliter de faire ca, jette ce code a la poubelle!
0
cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

6 févr. 2004 à 20:35
Bonsoir,

Excuse moi djl mais ce principe permet d'allouer de la memoire pour un tableau a deux dimensions.
(un tableau de pointeurs)...
Mise a part la gestion d'erreur, c'est comme ca que l'on peut proceder en C.
Une autre maniere est d'allouer avec un (*type)malloc(ligne * colonne * sizeof(type)) et de gerer les lignes et les colonnes "a la main"...

Matt...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
6 févr. 2004 à 20:40
for (k=0;k<size;k++)
{
Matrix[k] = (int *)malloc(height * sizeof(int));
if (Matrix[k] == NULL)
{
for (l=0;l<k;l++)
{
free(Matrix[l]);
cout<<"\nEchec lors de l'allocation memoire!!!";
}
}
}

> avec ca, ya risque de liberer un pointeur qu'il l'est deja, et donc de flinguer le gestionnaire de memoire, ca te gene pas?

il faut sortir, car l'allocation a echouer et au moins mettre les pointeurs a null (0)
0
cs_Matt67
Messages postés
549
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
6 mars 2010

6 févr. 2004 à 22:32
Bonsoir,

Relit mon post :
[..] Mise a part la gestion d'erreur, c'est comme ca que l'on peut proceder en C.[..]

Il est évident, qu'apres un free, il doit mettre a NULL les pointeurs qui pointaient sur l'espace memoire.

Une petite remarque : avec la deuxieme boucle, il ne libere que l'espace memoire pointée avec un pointeur valide.

Matt...
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
7 févr. 2004 à 09:22
oui mais si il retourne une 2e fois dans la boucle il liberera ce qui a deja ete libere, non?
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
7 févr. 2004 à 18:05
fait tout en C++ et utilise les exceptions, la tu es sur de tout arrêter s'il y a un problème
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
7 févr. 2004 à 18:14
debtoute facon ce mem code en c++ ne pose aucun probleme vu que l'operateur delete met le pointeur a NULL, ce qui fait qu'on peut faire 2 delete de suite sans plantage :D
0
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006

7 févr. 2004 à 19:43
Merci a tous de vos commentaires, mais concretement pour etre rationnel pour un gars comme moi qui ne pije pas grand chose. Comme ecrire ces codes en C++ pour initialiser un tableau proprement.

Merci.

Fred23
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
7 févr. 2004 à 19:58
moi je ferai comme ca :

#include 

int main()
{

int **Matrix;

// allocation
Matrix=new int*[size];

if(!Matrix) 
{
std::cout<<"echec allocation\n";
return 1;
}

for(int i=0;i<size;i++)
{
Matrix[i]=new int[height];
if(!Matrix[i])
{
std::cout<<"echec allocation\n";
return 1;
}// if

}// for

// liberation de l'espace allouer
for(int i=0;i<size,i++) delete[] Matrix[i];
delete[] Matrix;
}
0
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006

7 févr. 2004 à 20:13
Super Merci.

JE teste et je te dis cela.

Merci.

Fred23
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
7 févr. 2004 à 23:54
je ferais com djl mais avec des tryp et catch car normalement un exception est déclenchée si on ne peut pas allouer la mémoire
0
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006

8 févr. 2004 à 10:15
Bonjour,

G testé les codes et au lieu d'avoir un tableau en forme de martrice de n colone et M ligne, j'ai quelque chose de differents que je n'arrive pas a analyser.
Concretement, je cherche à faire un tableau de [i]*[j].

Quel serait votre meilleur solution.?

Merci.
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
8 févr. 2004 à 10:19
non ya pas de pb, le code que j'ai fait alloue un tableau de size*height, ya un truc qui marche pas?
0
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006

8 févr. 2004 à 10:33
OK, je reteste.
Mai sest il possible de faire un matirce simple dans l'aquelle je pourrais stocker et des CHAR et des INT.?
Si non que me conseille tu.?

A+
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
8 févr. 2004 à 10:44
pour le polymorphisme, utilise les templates du c++ ou alors type union (la je suis pas sur j'ai jamais utilisé)
va voir la c'est expliqué
http://casteyde.christian.free.fr/cpp/cours/online/c1224.html#COMPLEXTYPESECT
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
9 févr. 2004 à 23:06
le type union c'est un peu nul, préfère les templates, qui sont très faciles a utiliser
0
cs_fred23
Messages postés
152
Date d'inscription
lundi 5 août 2002
Statut
Membre
Dernière intervention
15 juillet 2006

10 févr. 2004 à 20:36
Et coté, impression ou exportation...???
Si je souhaite exporter mon board[i][j] vers un fichier texte.? quels sont les codes.,? Et pour l'imprimer.?
Vous devez certainement vous dire, mes qui est ce fred23 qui pose tant de question.? En fait je suis en univ et aprés moins de 10 cours ont me demande de faire un projet. Et avant cela je n'avais jamais touché au C++. J'ai bien avancé mais il y a encore quelque truc qui coince.
Voila pourquoi autant de question.
Merci pour votre coopération.
Fred23
0