2017-09-28 1 views
-3

J'écris l'algorithme en sélectionnant l'élément kth min, mais il y a une erreur de segment 11 signalée par le compilateur, je veux savoir ce qui ne va pas? Et ce qui provoque la panne de segment 11? Parce qu'il ya tellement de fois pour signaler la faute du segment 11.Pourquoi existe-t-il une erreur de segment 11

#include <stdio.h> 

int candidate(int a[], int m, int n) { 
int j = m, c = a[m], count = 1; 

while (j < m && count > 0) { 
    j++; 
    if(a[j] == c) 
     count++; 
    else 
     count--; 

} 

if(j == n) 
    return c; 
else 
    return candidate(a, j+1, n); 
} 

int main() { 
int n, a[n],c; 
int count = 0; 
printf("Input the number of elements in the array:\n"); 
scanf("%d", &n); 
printf("Input the array elements by sequence:\n"); 

for(int i = 0; i < n; i++) 
    scanf("%d", &a[i]); 
c = candidate(a, 1, n); 
for (int j = 0; j < n; ++j) 
{ 
    if(a[j] == c) 
     count++; 
} 
if (count > n/2) 
    printf("%d\n", c); 
else 
    printf("none\n"); 


} 
+3

'int n, un [n]': 'n' n'est pas initialisé. – BLUEPIXY

+0

"Parce qu'il y a tellement de fois à signaler le défaut du segment 11": autant de fois que le débogueur est nécessaire de localiser l'emplacement exact où il casse. –

+0

Mais la vérité est que je dois entrer n comme une entrée. Comment puis-je initialiser n? –

Répondre

0

Vous devez initialiser vous tableau après que vous connaissez la valeur réelle n.

Pour l'initialiser de façon dynamique, utilisez la mémoire HEAP et les fonctions malloc et free ainsi que des pointeurs.

int n, *a ,c; //Declare a as pointer to array 

//Get n here with scanf... 

//Now reserve memory for array 
a = malloc(sizeof(*a) * n); 
if (a) { 
    //We have our array ready to use, use it normally 
    for(int i = 0; i < n; i++) 
     scanf("%d", &a[i]); 

    //Release memory after usage 
    free(a); 
} 
+0

Thx MAN! Mais il reste une question de plus: mon algorithme reste en train d'imprimer 'none' après entrée 1 dans le tableau Pourquoi ne pas imprimer 1 comme élément le plus élément? –

+1

@LeoLi il est temps de déboguer. – tilz0R