-2
votes

Ne pouvait pas obtenir la raison de la faute dans le code

Il s'agit d'un programme d'impression de la valeur la plus petite et de sa position dans un tableau (défini par l'utilisateur). xxx

mais à l'exécuter, il montre la suite d'erreur suivante: < Pré> xxx

Que peut être la (s) raison (s) possible (s) pour cela?

c

5 commentaires

Pour un début, vous créez un tableau de taille n mais n est inintitualisé à l'époque.


Vous ne pouvez pas aller de 0 à n inclusif mais exclusif alors essayez j . Faites-moi savoir si cela vous a aidé.


Tout d'abord, votre tableau A S est n et n n'a aucune valeur tant que vous obtenez une entrée.


Et c'est pourquoi mon compilateur ne peut pas le compiler quand il y a une taille A est N.😃😃


Je me demande ce que tu faisais pour comprendre votre bogue avant de la publier. La première chose est de commenter des lignes une par ligne jusqu'à ce que la faute SEG soit partie, puis vous êtes beaucoup plus concentré sur l'endroit où cela se passe. Si vous ne comprenez toujours pas votre bogue, vous pouvez ensuite publier un programme plus minimal et demander de l'aide.


3 Réponses :


2
votes

première erreur, comme indiqué dans l'un des commentaires, déclare un tableau de taille N avant même de savoir combien n est.

La deuxième erreur est de boucle dans votre fonction principale qui va de 0 à N, c'est-à-dire l'index d'un tableau est hors limites. P>

Essayez ceci: p>

int main() {
    int n = 0, j = 0;
    printf("Enter the size of the array: ");
    scanf("%d", &n);

    int a[n];

    for (j = 0; j < n; j++) {
        printf("a[%d] = ", j + 1);
        scanf("%d", &a[j]);
    }
    position_smallest(a,n);
} 


1 commentaires

La deuxième erreur n'existe pas. La condition de l'OP I <= N-1 est équivalente à votre i



1
votes

Tout d'abord: xxx pré>

à la fois ininitialisé. Initialisez-les sinon vous obtiendrez des valeurs de déchets. P> xxx pré>

Que se passe-t-il si n code> par hasard (très probable) est 0 code> Dans la ligne suivante? p> xxx pré>

Vous allouez 0 code> octets pour tableau A [] code>. Vous entrez ensuite 10 code> dans la ligne suivante p> xxx pré>

Vous obtiendrez défaut de segmentation code> dans pour () Code> Boucle ci-dessous parce que votre boucle tente de mettre des éléments 10 code> où vous n'avez attribué aucune mémoire du tout. p>

Que se passe-t-il si une inaidification n code> par hasard ( très probable) est 2 ^ 32 * 4 octets ( int code> S max)? p> xxx pré>

Vous allouez 2 ^ 32 octets pour tableau A [] code>. Vous entrez ensuite 10 code> dans la ligne suivante p> xxx pré>

vous n'obtiendrez pas défaut de segmentation code> mais vous allouerez 2 ^ 32 * 4 octets de mémoire pour votre programme et vous n'utiliserez que 10 p>

second si cela ne suffit pas: p> xxx pré>

accédera à 11th Code> Elément du tableau qui est un comportement non défini, et vous pourriez même obtenir défaut de segmentation code> là. Comme vous le savez dans les tableaux C code> sont indexés de 0 code> à n - 1 code> (si n code> est la taille de la matrice ). P>

Troisième fonction de votre boucle à l'intérieur de la fonction: p> xxx pré>

est identique à: p> xxx pré>

Et enfin, vous avez un bogue dans votre code, je crois: p> xxx pré>

devrait être: p> xxx pré>

car il est Très probablement que vous souhaitez comparer un autre numéro à un élément déjà le plus petit de ne pas a [0] code>. Voici mon code P>

#include <stdio.h>
#include <stdlib.h>

int position_smallest(int a[],int n) {
    int smallest = a[0];
    int i=0,k=0;
    for(i=0; i<=n-1; i=i+1) {
        if(a[i]<smallest) {
            smallest = a[i];
            k = i;
        }
    }
    printf("The smallest value is %d\n", smallest);
    printf("It's position is %d\n", k);
    return 0;
}

int main() {
    int n=0, j=0;
    printf("Enter the size of the array: ");
    scanf("%d", &n);
    int *a = malloc(sizeof(int) * n);

    for(j=0; j<n; j=j+1) {
        printf("a[%d] = ", j);
        scanf("%d", &a[j]);                                                                                                                                                              
    }
    position_smallest(a,n);

    return 0;
}


1 commentaires

Merci @gox pour avoir donné des connaissances sur une nouvelle fonction malloc () . Je ne connaissais pas cela avant votre réponse. 😃😃



1
votes

Utilisez celui-ci:

#include <stdio.h>

int position_smallest(int a[],int n)
{
    int smallest = a[0];
    int i,k;
    for(i=0; i<=n-1; i=i+1)
    {
        if(a[i]<a[0])
        {
            smallest = a[i];
            k = i;
        }
    }
    printf("The smallest value is %d\n", smallest);
    printf("It's position is %d\n", k); 
    return 0;
}

int main()
{
    int n,j;
    int a[100];
    printf("Enter the size of the array: ");
    scanf("%d", &n);
    for(j=0; j<n; j=j+1)
    {
        printf("a[%d] = ", j);
        scanf("%d", &a[j]);
    }
    position_smallest(a,n); 
} 


0 commentaires