Malloc(): Memory Corruption

Тема в разделе "Общие вопросы по С и С++", создана пользователем PHPMaster, 30 май 2010.

  1. PHPMaster

    PHPMaster Гость

    Делаю парсер на C

    Нужно заменить ascii-коды символов на их эквиваленты

    сейчас юзаю:

    Код (Text):
    char *str_replace(char *str1, char *str2, char *str6)
    {
    char *str4;
    char *str5=malloc(0);

    while(strstr(str6, str1)) {
    str4 = strstr(str6, str1);
    strncpy(str5 + strlen(str5), str6, str4 - str6);
    strcat(str5, str2);
    str4 += strlen(str1);
    str6 = str4;
    }
    return strcat(str5, str4);
    }

    char *htmldecode(char *str)
    {
    str = str_replace("!", "!", str);
    str = str_replace(""", "\"", str);
    str = str_replace("#", "#", str);
    str = str_replace("$", "$", str);
    str = str_replace("%", "%", str);
    str = str_replace("&", "&", str);
    str = str_replace("'", "'", str);
    str = str_replace("(", "(", str);
    str = str_replace(")", ")", str);
    str = str_replace("*", "*", str);
    str = str_replace("+", "+", str);
    str = str_replace(",", ",", str);
    str = str_replace("-", "-", str);
    str = str_replace(".", ".", str);
    str = str_replace("/", "/", str);
    str = str_replace(":", ":", str);
    str = str_replace("&#59,", ";", str);
    str = str_replace("<", "<", str);
    str = str_replace("=", "=", str);
    str = str_replace("&62;", ">", str);
    str = str_replace("?", "?", str);
    str = str_replace("@", "@", str);
    str = str_replace("[", "[", str);
    str = str_replace("\", "\\", str);
    str = str_replace("]", "]", str);
    str = str_replace("^", "^", str);
    str = str_replace("_", "_", str);
    str = str_replace("`", "`", str);
    str = str_replace("{", "{", str);
    str = str_replace("|", "|", str);
    str = str_replace("}", "}", str);
    str = str_replace("~", "~", str);
    return (str);
    }
    Примечание:

    str = str_replace("~", "~", str); - в первом аргументе стоит аски код вида (& # 3 7 :rolleyes:, форум их преобразовывает.

    При запуске функции вылетает ошибка:

    Код (Text):
    malloc(): memory corruption: 0x0805eb38 ***
    ======= Backtrace: =========
    /lib/i686/cmov/libc.so.6[0xb75e1256]
    /lib/i686/cmov/libc.so.6(__libc_malloc+0x95)[0xb75e2655]
    Как исправить? Может, вобще сделать по-другому? Жду ответов.
     
  2. abdyla_v

    abdyla_v Гость

    Код (LotusScript):
    char *str_replace(char *str1, char *str2, char *str6)
    {
    char *str4;
    char *str5=malloc(0);

    while(strstr(str6, str1)) {
    str4 = strstr(str6, str1);
    strncpy(str5 + strlen(str5), str6, str4 - str6);
    strcat(str5, str2);
    str4 += strlen(str1);
    str6 = str4;
    }
    return strcat(str5, str4);
    }
    Мне кажется что тут написаны страшные вещи. Особенно представим что while ниразу не проработает сразу начинаются загадки с strcat(str5, str4); (так как str4 непонятно на что указывает, а для str5 просто обалдеть выделена память, зачем так выделять? и где free тогда для парности ;) )
     
Загрузка...
Похожие Темы - Malloc() Memory Corruption
  1. oshmianski
    Ответов:
    1
    Просмотров:
    1.278
  2. ToxaRat
    Ответов:
    2
    Просмотров:
    2.539
  3. Mady
    Ответов:
    10
    Просмотров:
    8.735
  4. susinmn
    Ответов:
    4
    Просмотров:
    2.621
  5. Akupaka
    Ответов:
    0
    Просмотров:
    1.655

Поделиться этой страницей