我尝试添加一个字符串动态分配一个元素,但我的函数中有一个东西“ajouter_element”“add_element”它在malloc中,但我不知道它是如何工作的
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 :(得分:0)
由于缺少一些信息,有点猜测:
chaine
很可能是char *
上的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
有未定义的值。
你必须这样做:
listeCourante->val = strdup(val);
代替。因此,内存分配正确,输入字符串将被复制。
注意:您可以通过定义typedef char chaine[20];
代替typedef char * chaine;
(并在val
函数中删除main
的malloc,使用scanf("%19s",val)
以避免溢出缓冲区......)