как всегда, есть код (приведен ниже). при запуске программы вылетает: *** glibc detected *** malloc(): memory corruption (fast): 0x0804f070 *** Aborted что должна делает программа: в функцию char ** get_elements() передается строка "3, 4, 5, 6". эта функция должна создать char **, раскидав в каждый char * строки: "3", " 4", " 5", " 6". т.е. char ** rrr = NULL; rrr = get_elements("3, 4, 5, 6"); после должно быть так: rrr[0] = "3"; rrr[1] = " 4"; rrr[2] = " 5"; rrr[3] = " 6"; rrr[4] = NULL; вся суть в функции get_elements() - вот только где там ошибка я так и не понял. подскажите, плиз. ЗЫ: функции add_char_to_string() и safe_free() никогда не подводили. void safe_free(char ** str) { if (!(*str)) return; free(*str); *str = NULL; }; char * add_char_to_string(char * str, char byte) { char * result = NULL; unsigned int len = 0; if (!str) len = 0; else len = strlen(str); result = (char*) calloc(len+2, sizeof(char)); if (!result) return NULL; if (len != 0) strcat(result,str); result[len] = byte; result[len+1] = '\0'; if (str) safe_free(&str); return result; }; char ** get_elements(char * params) { char ** result = NULL; unsigned int len = 0, i = 0, k = 0; char * temp = NULL; if (!params) return NULL; if (strlen(params) == 0) return NULL; len = strlen(params); while (1) { for(; i < len; i++) { if (params[i] == ',') break; temp = add_char_to_string(temp, params[i]); } k++; i++; if (!result) result = (char **) calloc(k + 1, sizeof(char *)); else result = (char**) realloc(result, k + 1); result[k] = 0; result[k-1] = temp; if (i >= len) { break; } temp = NULL; } return result; } int main(int argc, char *argv[]) { char ** rrr = NULL; rrr = get_elements("3, 4, 5, 6"); if (!rrr) { printf("Wrong\n"); } else { printf("Not bad\n"); } return EXIT_SUCCESS; };
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от nial
Ответ на:
комментарий
от zhuk
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от watashiwa_daredeska
Ответ на:
комментарий
от zhuk
Ответ на:
комментарий
от watashiwa_daredeska
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум C, Странная проблема с указателями в функции (2008)
- Форум Программа на Си падает, при выделении памяти (2014)
- Форум Конкатенация строк (2013)
- Форум Как в sqlite3 сделать «select * from ...» ? (2011)
- Форум Проблема с деструктором класса (2002)
- Форум Где я ошибся в примитивном коде? (2013)
- Форум g++ expects argument (2013)
- Форум [C] Параметры, Case (2012)
- Форум Проблема с pam_authenticate (2011)
- Форум c и iconv - помогите разобраться (2008)