Intereting Posts
Определяет ли объявление переменной выделение памяти? Макросы на языке C (#define) Что такое пример, в котором знание C заставит меня написать лучший код на любом другом языке? Можно ли установить приоритеты для правил, чтобы избежать «самой длинной самой ранней» модели соответствия? Создание больших массивов в C Указатель функций без типов аргументов? Создайте против более новых заголовков Linux, чем libc, построенный с использованием Свойства 80-битных расширенных вычислений точности, начиная с аргументов двойной точности Не удается получить доступ к памяти – gdb Использование Strtok, код не работает Ограничить длину шестнадцатеричной последовательности выхода в C-Строке Использование команды ASM в C Операции указателя и приоритет оператора в C Ошибка с модулем ffi node.js Неисправность Ошибка: Ошибка динамической связи: ошибка Win32 193 Вызов функции в сборке gcc inline

сбоев программы из-за плохого синтаксиса 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]='\0' ; } 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() для успеха, прежде чем использовать возвращаемый указатель.