2016-01-23 1 views
-3
#include <stdio.h> 
#include <stdlib.h> 
#include <memory.h> 
#include <string.h> 


int cauta(const void *x, int n, int dim_el, const void *el) 
{ 
    char *c = (char*) x; 
    int i; 
    for(i = 0; i < n; i++) 
    { 
    if(memcmp(c + i * dim_el, el, dim_el) == 0) 
     return 1; 
    } 
    return -1; 
} 

int main() 
{ 
    int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; 
    int k; 
    k = cauta(a, sizeof(a)/sizeof(a[0]), sizeof(a[0]), a[0]); 
    printf("%d", k); 
    return 0; 
} 

Le problème apparaît sur la ligne commentée. La fonction renvoie 1 si "el" existe dans le tableau "x". C'est simple, mais je ne comprends pas exactement pourquoi c'est un segmfault.Erreur de segmentation sur memcmp

Also, this is the call stack display when I tried debugging it line by line.

+6

Trop incomplet pour pouvoir vous aider. –

+0

@ iharob, désolé, j'ai édité et mis le code complet –

+0

S'il vous plaît examiner les pointeurs mathématiques ;-) –

Répondre

3

Dans votre code, les paramètres de la fonction sont

int cauta(const void *x,int n,int dim_el,const void *el) 

el attend un const void *, alors que, tout en appelant,

cauta(a,sizeof(a)/sizeof(a[0]),sizeof(a[0]),a[0]); 

vous avez passé a[0] qui est un int.

Vous devez transmettre une adresse, par exemple &a[3].

Cela dit, int main() devrait être int main(void) pour se conformer aux normes.

0

Vous êtes de passage dans un intdirea[0] dans cauta comme un const void * qui va provoquer l'erreur.