Je suis en train de mettre en œuvre un algorithme de hachage avec un type de type de paire de clé / valeur. Je stocke le dictionnaire comme une gamme d'entrées de données. I Mes partenaires et j'ai essayé Pour comprendre celui-ci, mais le problème a été coincé. P> SSCCE: P> MALLOC CODE> IT, mais quand je vais itérair à travers les éléments que je viens de répartir sur la fonction iniciializar_cerrada code>, programmez segfault à la 2e itération. #include <stdio.h>
#include <stdlib.h>
// ...
#define TAM 11
typedef struct entrada_ {
int ocupada;
char clave [LONGITUD_CLAVE];
char sinonimos [LONGITUD_SINONIMOS];
} entrada;
typedef entrada *tabla_cerrada;
void inicializar_cerrada(tabla_cerrada *diccionario, int tam) {
int i;
for (i = 0; i < tam; i++) {
printf("%d\n", i);
diccionario[i]->ocupada = 0;
}
}
int main() {
tabla_cerrada d = malloc(TAM * sizeof(entrada));
inicializar_cerrada(&d, TAM);
}
3 Réponses :
@gerhardh a commenté : < BlockQuote>
Vous pouvez essayer Diccionario [I] -> Ocupada => (* Diccionario) [i] .Ocupada P> blockQuote>
Cela a fonctionné super! p>
Tant que Void iniciializar_Cerrada (Tabla_Cerrada * Diccionario, int TAM) Code> n'est pas explicitement requis pour ressembler à ceci que vous recherchez des causes et des symptômes bien que correct.
Drop this et juste faire p> ou même économiseur: p> Si vous êtes obligé d'utiliser p> do p> toujours tabla_cerrada code> est Pas une "table" (tableau AKA) mais un pointeur. Comme je l'ai dit, ne vous confondez pas. P> p>
Je ne peux pas laisser tomber cette ligne, sa partie des spécifications du projet.
@Tretorn: Mise à jour de ma réponse.
@alk, vous êtes la bienvenue monsieur, nous sommes les yeux supplémentaires que vous avez besoin de Nitpick. :)
Supprimez l'astérisque de la définition de la fonction pour changer la notation de la flèche vers la notation de points. déposer le diccionario code> argument. Tabla_Cerrada code> est déjà un pointeur: p>
void iniciializar_cerrada (Tabla_cerrada diccionario, int ta tam) { code> p> li>
diccionario [i] code> est un struct code>, pas un pointeur sur un: p>
diccionario [i] .Ocupada = 0; code> p> li>
& code> à partir de l'appel de la fonction, d code> est de type Tabla_cerrada code>, qui est un pointeur: p>
iniciializar_cerrada (d, tam); code> p> li>
ol>
Dans la fonction code> principale code>, vous créez un "tableau" de Structure Objects i>, pas un tableau de pointeurs sur des structures (que la fonction
iniciializar_berrada code> traite comme ).Ne vous confondez pas par Typef'ing Pointer-Types.
Où est la fonction
mostrar_cerrada code>? Votre compilateur donne-t-il un avertissement?Diccionario [I] -> Ocupada Code> Cela semble poisson.diccionario code> est l'adresse d'un pointeurd code>, pas un tableau.Si vous savez que segfault à la deuxième itération, vous semblez l'exécuter dans un débogueur. Avez-vous vérifié toutes les variables? Surtout où les pointeurs pointent?
Vous pouvez essayer
diccionario [i] -> ocupada code> =>(* diccionario) [i] .Ocupada code>Pourquoi
Tabla_Cerrada * Diccionario Code> et nonTabla_Cerrada Diccionario code>? Parce que tu te confondus? ;-)@Gerhardh, vous voulez dire
(* diccionario) [i] .Ocupada code>.@Joeymallone oui je viens de voir ça. ;) Merci
Il serait plus simple d'avoir la fonction prendre
d code>, pas& d code>