Domanda

Ho bisogno di ordinare un array di caratteri per scorrere su di esso e stampare i punti dati univoci e il loro conteggio.Questo array è contenuto all'interno di un nodo di elenco collegato e desidero utilizzare qsort per farlo.Sfortunatamente, ricevo un segfault proprio su quella particolare riga.

void printArray(Node_ptr node){

    int count=0; //character count

    char *temp= node->attributes; //duplicate attribute array



    char cur; //current char

    char *outputCat= emalloc(150); //concatenate counts to a single string

    outputCat= "Attribute %d counts are: ";



    qsort(&temp, lineCount, sizeof(char), compare); //sort the array

    ... more code
}

Ho preso il metodo di confronto dalla pagina man qsort

int compare(const void *a, const void *b){

  return strcmp(*(char * const *) a, *(char * const *) b);

}

In DDD, la riga qsort è quella che attiva il segfault.Inizialmente pensavo che fosse dovuto a imprecisioni nei parametri, quindi ho inserito alcune istruzioni di debug printf.printf("%s", temp) stampa 1000 caratteri, che è esattamente quello che dovrebbe essere il linecount.I caratteri sono 1 byte ciascuno, quindi non c'è bisogno di sizeof(char) qui.

Il rapporto di errore da ddd su quella riga è

Program received signal SIGSEGV, Segmentation fault.    
0xb7f8c498 in ?? () from /lib/libc.so.6

È colpa di qsort o qualcos'altro del mio codice?

È stato utile?

Soluzione

Questo

qsort(&temp, lineCount, sizeof(char), compare);

Dovrebbe essere:

qsort(temp, lineCount, sizeof(char), compare);

Non è necessario passare l'indirizzo di un puntatore!

il primo argomento di qsort è un puntatore, quindi se gli passi un puntatore, non è necessario utilizzare l'operatore address-of, altrimenti stai passando un puntatore a un puntatore, che non è quello che vuoi in questo caso.

Altri suggerimenti

Se vuoi ordinare i caratteri, il primo argomento di qsort () dovrebbe essere un puntatore a caratteri, non un puntatore a un puntatore a caratteri.Lo stesso per strcmp ()

Inoltre: aggiungi la definizione per struct node.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top