C - 由于错误的 malloc() 语法,程序崩溃


struct nouedls
{
    char * path;
    char * name;
    struct nouedls * suiv;
};
typedef struct nouedls nouedls;
typedef nouedls * listes;
listes ajouters(listes ls, char * path , char* name)
{
    nouedls * x=malloc(sizeof(x));
    listes auxl;
    x->path=malloc(strlen(path)*sizeof(char));
    x->name=malloc(strlen(name)*sizeof(char));

    strcpy(x->path,path);
    strcpy(x->name,name);

    x->suiv=NULL;

    if (ls==NULL){
            ls=x;
            }
    else
    {
        auxl=ls;
        while(auxl->suiv!=NULL)
        {
            auxl=auxl->suiv;
        }
        auxl->suiv=x;
    }
    return(ls);
}
void makepath(char* path){
    char ch2 [400];
    int i=0 ;
    int k=0 ;
    while (path[i]!='n')
    {
    if (path[i]!='\')
    {
    ch2[k]=path[i] ;
    i++ ;
    k++ ;
    }
    else
    {
    ch2[k]=path[i] ;
    k++ ;
    ch2[k]='\' ;
    k++ ;
    i++ ;
    }
    }
    ch2[k]='' ;
}


void menu (char*path){
    FILE *fp;
    char *fname = "MyScript.bat";
    FILE *f ;
    listes menu=malloc(sizeof(menu)) ;
    char upath [400];
    char name [260] ;
    menu=NULL ;
    if ((fp = fopen(fname, "wt")) == NULL)
    {fatal("Cannot open script file");}
    makebatfd(fp, "MyDirectory",path);
    if (fclose (fp))
    {fatal("Cannot close script file");}
    system("MyScript.bat>menu.txt");//make the menu .txt file
    nom(path) ;//makes the name.txt file
    if ((fp = fopen("menu.txt", "r+")) == NULL)
    {fatal("Cannot open menu file");}
    if ((f = fopen("name.txt", "r+")) == NULL)
    {fatal("Cannot open name file");}
printf("path") ;
while (fgets(upath,400,fp)!= NULL )
    {
    makepath(upath) ;//it handles the character '' 
    fgets(name,260,f) ;
printf("%s",upath) ;
menu=ajouters(menu,upath,name) ;
printf("path") ;
    }

    if (fclose (f))
    {fatal("Cannot close name file");}
    if (fclose (fp))
    {fatal("Cannot close menu file");}

}

menu函数创建一个文件menu.txt其中包含文件的路径,另一个文件name.txt其中包含这些文件的名称。 我想使用函数将这些文件中包含的信息放在列表中,ajouters它工作,但在某一行它崩溃了(我只放了我怀疑的函数, 因为其他人工作得很好(

我想

,你需要改变

要点 1:

nouedls * x=malloc(sizeof(x));

nouedls * x=malloc(sizeof(*x));   // *x == struct nouedls, x == struct nouedls *

要点 2:

x->path=malloc(strlen(path)*sizeof(char));

x->path=malloc(strlen(path) + 1);    //+ 1 to hold the terminating null, sizeof(char) == 1 always.

同样。

此外,在使用返回的

指针之前,必须检查 malloc() 的返回值是否成功。

相关内容

  • 没有找到相关文章

最新更新