как всегда, есть код (приведен ниже).
при запуске программы вылетает:
*** 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)
- Форум Обещаный код с ошибкой __int_malloc (2004)
- Форум [C] Параметры, Case (2012)
- Форум Проблема с pam_authenticate (2011)