Пишется ЯДЕРНЫЙ МОДУЛЬ. Вообщем надо было реализовать склеивание двух строк char*. Написал пару функций, одна непосредственно для соединения, вторая оперирует первой в зависимости от параметров. Запускаю, смотрю вывод, и вижу в нём вместе с исходными элементами мусор, по типу символо: " ! , и др. Решил вынести всё это в отдельный сишник и разобраться. Определился глюк такого плана. Выглядит это так: 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 *** glibc detected *** free(): invalid next size (fast): 0x0804a028 *** Aborted Код такой: #include <stdio.h> #include <stdlib.h> char *out = NULL; char *addstr(char *first, char *second) { int i, k, len_first, len_second; char *ret; if(!first) return 0; if(!second) return 0; k = 0; len_first = strlen(first); len_second = strlen(second); ret = malloc(sizeof(char[len_first + len_second])); for(i = 0; i < len_first; i++) { ret[i] = first[i]; } for(i = len_first; i < (len_first + len_second); i++) { ret[i] = second[k]; k++; } printf("%s\n",ret); return ret; } int netfw_add_to_out(char *a, char *b) { char *temp; if(a == 0) { temp = addstr(out,b); if(!temp) return 0; if(out) free(out); out = malloc(sizeof(char[strlen(out)+strlen(b)])); } else if(a != 0) { temp = addstr(a,b); if(!temp) return 0; if(out) free(out); out = malloc(sizeof(char[strlen(a)+strlen(b)])); } out = strcpy(out,temp); free(temp); return 0; } int main(int argc, char *argv[]) { netfw_add_to_out("1","2"); netfw_add_to_out(0,"3"); netfw_add_to_out(0,"4"); netfw_add_to_out(0,"5"); netfw_add_to_out(0,"6"); netfw_add_to_out(0,"7"); netfw_add_to_out(0,"8"); netfw_add_to_out(0,"9"); netfw_add_to_out(0,"10"); netfw_add_to_out(0,"11"); netfw_add_to_out(0,"3"); netfw_add_to_out(0,"4"); netfw_add_to_out(0,"5"); netfw_add_to_out(0,"6"); netfw_add_to_out(0,"7"); netfw_add_to_out(0,"8"); netfw_add_to_out(0,"9"); netfw_add_to_out(0,"10"); netfw_add_to_out(0,"11"); printf("out = %s\n",out); return EXIT_SUCCESS; } Начал изучать. Одиннадцать вызовов netfw_add_to_out не случайны, если их меньше, то такой ошибки нет, в модуле ошибка проявляется в зависании всей системы, видимо сегфолт. И вот что интересно, если закоментировать if(out) free(out) в этом куске: if(a == 0) { temp = addstr(out,b); if(!temp) return 0; // if(out) free(out); out = malloc(sizeof(char[strlen(out)+strlen(b)])); } То глюк пропадает, но при этом, если я правильно понял, будет засорятся память. Это подтверждается, если вызовов указанной выше функции будет 22. Вот что выходит: 12 123 1234 12345 123456 1234567 12345678 123456789 12345678910 1234567891011 12345678910113 123456789101134 1234567891011345 12345678910113456 123456789101134567 1234567891011345678 12345678910113456789 12345678910113456789!10 12345678910113456789!1011 out = 12345678910113456789!1011 Как видно на последних трёх строчках появились "!", но они ни разу не указывались, проверял несколько раз поиском :) их нет, значит это ошибка с выделением памяти. Как я уже сказал, это если указанная выше строчка закоментирована, без комента будет уже описанная ошибка *** glibc detected ***. Вот собсно и вопрос - что не так и что делать!? P.S. КОД ПИШЕТСЯ ДЛЯ МОДУЛЯ ПОЭТОМУ СТОРОННИЕ ЛИБЫ НЕ ПРИМЕНИМЫ!!! Заранее спасибо!!!
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от Eldhenn
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от berrywizard
Ответ на:
комментарий
от berrywizard
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от cyclon
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум c и iconv - помогите разобраться (2008)
- Форум C, Странная проблема с указателями в функции (2008)
- Форум Правильно ли я организовал выделение памяти? (2014)
- Форум Ошибка в коде... (2006)
- Форум [Си] double free or corruption (2010)
- Форум Задачка с массивом строк на Си (2008)
- Форум помогите немогу понять куда девается stdout (2009)
- Форум Почему программа выключается? (2017)
- Форум Программа на Си падает, при выделении памяти (2014)
- Форум Ошибки в работе функции, в которой вызывается malloc() (2014)