Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

работа с динамически создаваемым двумерным массивом

37K
15 мая 2012 года
qbikk
40 / / 08.09.2010
выдает ошибку при подчищении памяти, в чем может быть проблемма?

Код:
char *cpGetSubStr(char *cpStr1, char *cpStr)
{
    int i,j,k;
    char *p,*cpBuf;
    char **cppSub;
    char *cpStr2;
    char *cpStrSub;
    int size_str1,size_str;

    size_str1=strlen(cpStr1);
    size_str=strlen(cpStr);

    /***Выделение памяти*****/
    if ((cpStr2=(char*)malloc(2*strlen(cpStr)+2))==NULL)
    {
        cout << "Error! Not enoght memory";
        return NULL;
    }

    if ((cppSub=(char**)malloc(strlen(cpStr)+1))==NULL)
    {
        cout << "Error! Not enoght memory";
        return NULL;
    }

    if ((cpStrSub=(char*)malloc(MAX_LEN_STR))==NULL)
    {
        cout << "Error! Not enoght memory";
        return NULL;
    }

    strcpy(cpStr2,cpStr);
    strcat(cpStr2,"_");
    strcat(cpStr2,cpStr);

    for(i=0;i<(size_str+1);i++)
    {
        if ((cppSub[i]=(char*)malloc(size_str1+1))==NULL)
        {
            cout << "Error! Not enoght memory";
            return NULL;
        }
        for(j=0;j<size_str1;j++)
        {
            if(cpStr1[j]==cpStr2[i+j])
                cppSub[i][j]=cpStr1[j];
            else
                cppSub[i][j]='_';
        }
        cppSub[i][size_str1]=0;
        cout<<i<<" "<<cppSub[i]<<"\n";
    }

    free(cpStr2);
    for(i=0;i<(strlen(cpStr)+1);i++)
        free(cppSub[i]);
    free(cppSub);
   
    return cpStrSub;
}
277
15 мая 2012 года
arrjj
1.7K / / 26.01.2011
if ((cppSub=(char**)malloc(strlen(cpStr)+1))==NULL) <== неправильно выделяешь память под массив указателей
примерно так (не вникал в суть твоей задачи)
if ((cppSub=(char**)malloc(sizeof(char*)*(strlen(cpStr)+1)))==NULL)

И вообще в C++ используйте функции выделения памяти из C++ (new new[] delete delete[]) а не из C
3
25 мая 2012 года
Green
4.8K / / 20.01.2000
Ну и лучше тогда (C++) вообще использовать std::vector< std::vector<T> >
1
26 мая 2012 года
kot_
7.3K / / 20.01.2000
Цитата: Green
Ну и лучше тогда (C++) вообще использовать std::vector< std::vector<T> >


какие люди и без охраны )

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог