Pionteur

Signaler
Messages postés
158
Date d'inscription
samedi 31 janvier 2004
Statut
Membre
Dernière intervention
12 mars 2009
-
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
-
Salut j'ai un petit problème avec l'allocation dinamique sur VC++ 6
je cherche la correspondance entre "malloc" et "new"
voilà la l'allocation que je veux convertir:

unsigned char* pAbc=NULL;
int y,n;
{}
pAbc=(unsigned char*) malloc(y*n+1);

je la ma même allocation avec new.

j'ai essayé : image= new (unsigned char*) (y*n+1);
ET j'obtiens l'erreur : CANNOT CONVERT INT TO UNSIGNED CHAR *

25 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
new n'est pas une fonction mis un opérateur et s'utilise comme suit:
image = new unsigned char[y*n+1]
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
T *p;

en c

p = malloc( N * sizeof *p );

pour liberer

free( p );

en c++

p = new T[ N ]; // appel de T() pour les N elements

delete[] p; // appel de ~T() pour les N elements

delete met le pointeur à NULL ( 0 par conversion implicite ) et gere le pointeur NULL

si tu utilise malloc en c++

p = (T *) malloc( N * sizeof *p );
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
sizeof(p) au lieu de sizeof *p

C'est spécifié que delete met pointeur à NULL? J'avais jamais fait gaffe...
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
oui, c'est inutile de faire

if( p != NULL ) delete p;

ou

delete p; p = NULL; comme on voit ca souvent...

sinon c'est sizeof *p qu'il faut mettre

double *p;

p = malloc( sizeof p ); tu alloue 4 octet au lieu de 8

l'interet de mettre sizeof *p au lieu de sizeof( double ) c'est si le type de p change, le malloc sera toujours correct
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Difficile que le pointeur soit mis a NULL sans affectaion.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
ah oui pardon
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
if( p != NULL ) delete p;

peut être utile parfois
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
BruNews > tu me crois pas ?
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
if( p != NULL )
if( p != 0 )
if( !p )

finalement je prefere l'ecriture la plus courte :D
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
int* a = new int;
printf("%d", a);
delete a;
printf("\n%d", a);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Me semble bizzare que derriere
delete p;
p soit mis a NULL sans affectation.
Je vais donc tester de suite.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
si delete prend p par reference, ou est la bizarie ?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
justement, dans mon exemple pas mis a 0
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
char *p;
p = new char[200];
delete p;
if(p) MessageBox(0, "encore", szappname, 0);

j'ai bien le messagebox.

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
vecchio56 > tu as %p pour les pointeurs
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
ok je verifie
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
djl> autre sujet, tu pourrais redonner le bon site tuto cpp que tu connais.
http://www.cppfrance.com/forum.v2.aspx?ID=275777

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
vous avez raison, j'aurais jurer avoir lu qqpart

en tout cas

int *p = 0;

delete p; ne plante pas

http://cowww.epfl.ch/infmaph/doc/coursCpp/book1.html
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
pas avec int, mais plante avec classe:

class a
{
public:
~a();
};

a::~a()
{
}

int main()
{
a* p;
delete p;
}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
BruNews: le cours, c'est celui que j'ai donné sauf que moi c'est sur le site de l'auteur