Pionteur

lilington Messages postés 158 Date d'inscription samedi 31 janvier 2004 Statut Membre Dernière intervention 12 mars 2009 - 12 août 2004 à 19:27
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 - 12 août 2004 à 21:52
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

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 19:30
new n'est pas une fonction mis un opérateur et s'utilise comme suit:
image = new unsigned char[y*n+1]
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:04
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 );
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:06
sizeof(p) au lieu de sizeof *p

C'est spécifié que delete met pointeur à NULL? J'avais jamais fait gaffe...
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:17
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
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 21:19
Difficile que le pointeur soit mis a NULL sans affectaion.

ciao...
BruNews, Admin CS, MVP Visual C++
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:21
ah oui pardon
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:22
if( p != NULL ) delete p;

peut être utile parfois
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:23
BruNews > tu me crois pas ?
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:24
if( p != NULL )
if( p != 0 )
if( !p )

finalement je prefere l'ecriture la plus courte :D
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:26
int* a = new int;
printf("%d", a);
delete a;
printf("\n%d", a);
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 21: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++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:30
si delete prend p par reference, ou est la bizarie ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:31
justement, dans mon exemple pas mis a 0
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 21:31
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++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:31
vecchio56 > tu as %p pour les pointeurs
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:32
ok je verifie
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 août 2004 à 21:34
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++
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
12 août 2004 à 21:38
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
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:41
pas avec int, mais plante avec classe:

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

a::~a()
{
}

int main()
{
a* p;
delete p;
}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
12 août 2004 à 21:42
BruNews: le cours, c'est celui que j'ai donné sauf que moi c'est sur le site de l'auteur
0
Rejoignez-nous