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:
	
| 12
 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:
	
| 12
 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:
	
| 12
 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:
	
| 12
 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;
} |