2016-10-04 93 views
0

我嘗試添加一個字符串動態分配的元素,但有一件事在我的功能「ajouter_element」「add_element」它在malloc的,但我不知道它是如何工作的與charactere陣列動態分配

void ajouter_element(liste* liste, chaine val){ 
    element* listeCourante; 
    element* parcourt; 
    parcourt = *liste; //Cette element sert de pointeur ppour parcourir la liste pour ne pas perde la tete de la liste 
    listeCourante = (element*)malloc(sizeof(element)); // on alloue de la place dans cette liste 
    strcpy(listeCourante->val,val); // puis on ajoute la valeur entrée au clavier dans ce nouvelle element 
    listeCourante->svt=NULL; //comme on l'ajoute a la fin l'element suivant est donc NULL 
    if(parcourt==NULL){ 
     *liste=listeCourante; //si la liste de depart est NULL on ajoute directement l'element 
    }else{ 
     printf("pk"); 
     while(parcourt->svt!=NULL){//on parcourt la liste pour pouvoir ajouter a la fin il faut que le pointeur pointe sur le derniere element 
      printf("pk"); 
      parcourt=parcourt->svt; 
     } 
     parcourt->svt=listeCourante; 
    } 
} 

我主要以確保項目工程

int main(){ 

    liste liste; 
    chaine valeur; 
    valeur=(chaine)malloc(20*sizeof(char)); 
    initialisation(&liste); 
    afficher_liste(liste); 

    printf(" Entrez un mot (TAPEZ * POUR ARRETER LA BOUCLE) : \n"); 
    scanf("%s",valeur); //on lit la valeur a jouter au clavier 
    while(strcmp(valeur,"*")!=0){ // * est le marqueur pour arreter la boucle 
    printf("ca marche 2.0"); 
    ajouter_element(&liste,valeur); 
    printf(" Entrez un mot (TAPEZ * POUR ARRETER LA BOUCLE) : \n"); 
    scanf("%s",valeur); 
    printf("ca marche"); 
    } 

    afficher_liste(liste); 

    printf(" \nEntrez le mot a supprimer : \n"); 
    scanf("%s",valeur); 
    supprimer_element(&liste,valeur); 

    afficher_liste(liste); 

    return 0; 
} 
+0

什麼是你的問題嗎? 'chaine'的類型是什麼?顯示所有類型會更好。 –

回答

0

,因爲有些信息猜測的一點缺失:

chaine很可能是一個01一個typedef(看到value分配主程序)

當你這樣做:

listeCourante = (element*)malloc(sizeof(element)); // on alloue de la place dans cette liste 

你分配一個元素。但是你不會爲val char數組初始化內存。所以下面的說法:

strcpy(listeCourante->val,val); // puis on ajoute la valeur entrée au clavier dans ce nouvelle element 

可能因爲listeCourante->val有未定義的值而崩潰。

你要做的:

​​

代替。所以內存分配恰到好處,輸入字符串被複制。

注意:你可以有定義typedef char chaine[20];而不是typedef char * chaine;

讓你的工作方案(以及main功能下降的val malloc的,用scanf("%19s",val)避免溢出緩衝區...)