работа с динамически создаваемым двумерным массивом
Код:
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;
}
{
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;
}
примерно так (не вникал в суть твоей задачи)
if ((cppSub=(char**)malloc(sizeof(char*)*(strlen(cpStr)+1)))==NULL)
И вообще в C++ используйте функции выделения памяти из C++ (new new[] delete delete[]) а не из C
Ну и лучше тогда (C++) вообще использовать std::vector< std::vector<T> >
Цитата: Green
Ну и лучше тогда (C++) вообще использовать std::vector< std::vector<T> >
какие люди и без охраны )