2013-06-27 4 views
-5

Pourquoi le bloc de code suivant ne fonctionne-t-il pas?Quel est le problème avec le bloc de code suivant?

int *p1 = malloc(128); 

int main(void) { 
char *p2 = malloc(128); 
} 
+4

que voulez-vous dire par « ne fonctionne pas "? Pouvez-vous coller dans le message d'erreur? –

+0

(1): erreur: l'initialiseur doit être constant. –

+1

Définir "ne fonctionne pas": quelles erreurs obtenez-vous, qu'espériez-vous arriver et qu'est-ce qui se passe réellement? –

Répondre

1

vous ne pouvez pas utiliser malloc pour initialiser p1 en dehors du bloc de code comme ça, le faire à l'intérieur comme principale p2

1

Vous ne pouvez pas appeler une fonction dans l'initialisation d'une variable globale . C'est la ligne dont il se plaint:

int *p1 = malloc(128); 

Changez ceci en NULL, puis en main, initialisez-le.

2

L'initialisation d'une variable globale doit être constante, donc le premier malloc provoquera une erreur de compilation.

-2

1er, l'erreur de base est que votre principale méthode doit retourner une valeur int

int main(void) { 
char *p2 = malloc(128); 
return 0; 
} 

ou essayez

void main(){ 
char *p2 = malloc(128); 
} 

2, vous pouvez spécifier quel type de tampon que votre pointeur est , sinon, ce sera un (void *) de type pointeur, donc je suggère que vous pouvez essayer:

int *p1 = (int*)malloc(128); 
char *p2 = (char*)malloc(128); 
+1

-1 'void main()' n'est vraiment pas correct. Lancer un malloc n'est pas non plus nécessaire. Pointeur vide est automatiquement converti en n'importe quel pointeur, vous n'avez rien à spécifier. –

+0

Je le mettrais beaucoup plus fortement que ça: 'void main()' est faux sur toute implémentation hébergée, ce qui entraîne un comportement indéfini. Ne fais jamais cela. –