как всегда, есть код (приведен ниже).
при запуске программы вылетает:
*** 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)