2017-08-06 1 views
-1

https://i.stack.imgur.com/kU6lD.pngpourquoi dans ce programme l'erreur d'exécution dépend de la valeur de l'entrée?

#include<stdio.h> 
#include<stdlib.h> 
int main() 
{ 
    int i,n,*a=(int*)malloc(n*sizeof(int)); 
    scanf("%d",&n); 
    for(i=0;i<n;++i) 
    scanf("%d",(a+i)); 
    for(i=0;i<n;++i) 
    printf("%d",*(a+i)); 
    free(a); 
    return 0; 
} 

l'exécution du programme ci-dessus smootly jusqu'à l'entrée (c.-à-n) est inférieur ou égal à l'entrée 6.If I n supérieur à 6 alors il montre error.WHY d'exécution? Ici Erreur d'exécution dépend la valeur de l'entrée ??)

+0

Vous utilisez la valeur d'une variable non initialisée 'n' pour allouer de la mémoire. que 'malloc()' doit être placé ** après ** 'scanf()'. – m0h4mm4d

+0

Et je vous suggère de mettre le code dans votre question, au lieu de le télécharger comme une image. Il y a une balise de code dans SO qui fonctionne parfaitement pour le code c. – m0h4mm4d

Répondre

0

essayer ce en haut:

int i = 0; 
int n = 0; 
int *a = NULL; 
scanf("%d", &n); 
if(n > 0) { 
    a = (int*)malloc(n * sizeof(int)); 
    if(!a) { 
     printf("malloc failed"); 
     return 0; 
    } 
} 
else { 
    printf("enter number > 0"); 
    return 0; 
} 
-1

Bienvenue sur SO. Votre programme appelle undefined behaviour (UB) lorsque vous faites malloc(n * sizeof(int)) car la variable n n'est pas initialisée et la lecture/utilisation d'une variable non initialisée entraîne UB.

À votre avis, quelle sera la valeur de n lorsque vous appelez malloc? n pourrait même être une valeur négative. Une fois que vous appelez UB, il n'y a aucune indication sur ce que votre programme va faire. Vous devez appeler le scanf avant d'appeler le malloc.

Votre main fonction est pas plainte des normes. Why? Dès la prochaine fois s'il vous plaît mettez votre code directement dans la question.

+0

C'est. ____________ –

+0

@PeterJ Que voulez-vous dire? – babon

+0

c'est à propos de vous remarque "principale" –