Информация об изменениях

Сообщение Re: Как правильно освободить память от массива символов, пол от 28.04.2015 12:06

Изменено 28.04.2015 12:08 Кодт

Здравствуйте, newpy, Вы писали:

N>char * genstr(unsigned int len) {
N>    char chars[] = {'0','1','2','3','4',
N>            '5','6','7','8','9',
N>            'A','B','C','D','E','F',
N>            'G','H','I','J','K',
N>            'L','M','N','O','P',
N>            'Q','R','S','T','U',
N>            'V','W','X','Y','Z',
N>            'a','b','c','d','e','f',
N>            'g','h','i','j','k',
N>            'l','m','n','o','p',
N>            'q','r','s','t','u',
N>            'v','w','x','y','z', '\n', ' ',
N>            '#'
N>            };
      char const * charset = "012345......#";
      // так и записывается компактнее, и не создаётся каждый раз на стеке, а лежит в секции констант
 
N>    char * str = new char [len];
      char * str = new char [len+1]; // концевой нолик не забываем - иначе это не совсем строка, а просто массив символов

N>    for (unsigned int ix = 0; ix < len; ++ix){
N>        // Первую половину текста мы генерируем без решетки
N>        if (ix < len / 2)
N>            str[ix] = chars[rand() % sizeof(chars) - 1];
N>        else
N>            str[ix] = chars[rand() % sizeof(chars)];
N>    }

      str[len] = 0; // вот он, концевой нолик
 
N>    return str;
N>}
Re: Как правильно освободить память от массива символов, пол
Здравствуйте, newpy, Вы писали:

N>char * genstr(unsigned int len) {
N>    char chars[] = {'0','1','2','3','4',
N>            '5','6','7','8','9',
N>            'A','B','C','D','E','F',
N>            'G','H','I','J','K',
N>            'L','M','N','O','P',
N>            'Q','R','S','T','U',
N>            'V','W','X','Y','Z',
N>            'a','b','c','d','e','f',
N>            'g','h','i','j','k',
N>            'l','m','n','o','p',
N>            'q','r','s','t','u',
N>            'v','w','x','y','z', '\n', ' ',
N>            '#'
N>            };
      static char const chars[] = "012345......#";
      // так и записывается компактнее, и не создаётся каждый раз на стеке, а лежит в секции констант
      size_t count = sizeof(chars)-1; // исключим концевой нолик из таблицы
 
N>    char * str = new char [len];
      char * str = new char [len+1]; // концевой нолик не забываем - иначе это не совсем строка, а просто массив символов

N>    for (unsigned int ix = 0; ix < len; ++ix){
N>        // Первую половину текста мы генерируем без решетки
N>        if (ix < len / 2)
N>            str[ix] = chars[rand() % count - 1];
N>        else
N>            str[ix] = chars[rand() % count];
N>    }

      str[len] = 0; // вот он, концевой нолик
 
N>    return str;
N>}