首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于 free 传入传出参数的有关问题 多谢

2012-03-11 
关于 free 传入传出参数的问题 谢谢!int appendstring ( char** pDest, const char* pSrc ){intiEndchar*

关于 free 传入传出参数的问题 谢谢!
int appendstring ( char** pDest, const char* pSrc )
{
  int iEnd;
  char *pString ;
  pString = *pDest;
  if ( pSrc == (char*)NULL || strlen ( pSrc ) == 0 )
  {
  return ;
  }

  /* check src */
  if ( pString == (char*)NULL )
  {
  pString = (char*) malloc ( strlen(pSrc)+10 );/* allocate and copy */
  iEnd = 0;
  }
  else
  {
  iEnd = strlen(pString );
  pString = malloc(iEnd+strlen(pSrc)+10);
  memcpy(pString,*pDest,iEnd);
  pString[iEnd]=0;
  free(*pDest);  
  *pDest = NULL;
  }

  if(pString !=NULL)
  {
  memcpy(pString+iEnd,pSrc,strlen(pSrc));
  pString[strlen(pSrc)+iEnd]=0;
  *pDest = pString;
  }
  return ;
}

int main(void) 
{
  char *buf = "abc" ;
  appendstring(&buf,"d");
  printf("%s",buf);
}
这是一个拼接字符串的函数,为什么free之后 会造成非法内存访问呢?悉心求教!

[解决办法]
"abc"是文本字符串常量。 
存入内存后它就算是常量了,因为已经使用一个non-const pointer to char指向它了。

热点排行