malloc(); et visual studio
bonjour !
Encore une question sur une fonction en C!!
On vient de voir les pointeurs en cours, et chez moi, sous visual studio c++, lorsque j'essaye de compiler :
Code:
1 2 3 4 5 6 7
| void main()
{
int *ptab;
*ptab = (int *)malloc(sizeof(int));
//printf("%d\n",*(ptab+1));
system("pause");
} |
j'ai l'erreur suivante: error C2440: '=' : cannot convert from 'int *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Je n'arrive pas à comprendre l'erreur...
Re: malloc(); et visual studio
Citation:
Envoyé par Spike Spiegel
Code:
1 2 3 4 5 6 7
| void main()
{
int *ptab;
*ptab = (int *)malloc(sizeof(int)); <-----------------
//printf("%d\n",*(ptab+1));
system("pause");
} |
Sur la ligne flechée, tu déréférences ta variable ptab en mettant l'étoile devant. Tu désignes donc la valeur de ce pointeur, or malloc renvoie un pointeur.
Il faut donc enlever l'étoile.
*ptab = valeur de ton entier
ptab = adresse de ton entier
a+
Re: malloc(); et visual studio
Eh bien, il s'en passe des choses pendant ma sieste!
Citation:
Envoyé par Spike Spiegel
Encore une question sur une fonction en C!!
On vient de voir les pointeurs en cours, et chez moi, sous visual studio c++, lorsque j'essaye de compiler :
Code:
1 2 3 4 5 6 7
| void main()
{
int *ptab;
*ptab = (int *)malloc(sizeof(int));
//printf("%d\n",*(ptab+1));
system("pause");
} |
j'ai l'erreur suivante:
error C2440: '=' : cannot convert from 'int *' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
Tu n'invoques pas le bon compilateur. Assure toi que tu appelles bien le compilateur C :
- extension .c et non .C ni .cpp
- configuration de ton IDE
Néanmoins, ton code est incorrect et invoque de mauvaises pratiques :
- main() retourne int. Toujours.
http://emmanuel-delahaye.developpez....s.htm#typemain
- manque le prototype pour malloc () (<stdlib.h>)
- '*ptab' est un int. De plus, ptab n'étant pas encore initialisé, le déréférencer invoque un comportement indéfini. Tu veux probablement dire 'ptab'.
- la valeur retournée n'est pas testée
- la mémoire allouée n'est pas libérée
http://emmanuel-delahaye.developpez....tes.htm#malloc
Ceci est correct :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
|
#include <stdlib.h>
int main (void)
{
int *ptab = malloc (sizeof *ptab);
if (ptab != NULL)
{
/* utilisation de ptab */
free (ptab), ptab = NULL;
}
return 0;
} |