在发一道面试题目..

gaoliang0807 2007-11-09 03:45:52
bool resizebuff(int *pBuf,int &nBnfSize)
{
int nNoneSize;
int *pTemp;
nNoneSize=2*nBnfSize;
pTemp=new int[nNoneSize];
if(pTemp==NULL)
return false;
memset(pTemp,0,nNoneSize*sizeof(int));
memcpy(pTemp,pBuf,nBnfSize);
pBuf=pTemp;
nBufSize=nNoneSize;
return true;
}
上个函数有哪些错误..据说有三处..各位高手给指点指点...
...全文
174 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hxf829 2009-09-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 treazy 的回复:]
C/C++ code//加入头文件#include<string.h>
#include<memory.h>bool resizebuff(int*pBuf,int&nBnfSize)
{int nNoneSize;int*pTemp;

nNoneSize=2*nBnfSize;
pTemp=newint[nNoneSize];if(pTemp== NULL)returnfalse;

memset(pTemp,0,nNoneSize*sizeof(int));
memcpy(pTemp,pBuf,nBnfSize);//memcpy不对pTemp和pBuf的重叠部分判断,需要换成memmove
pBuf=pTemp;
nBnfSize= nNoneSize;//nBufSize改成nBnfSize//加入以下语句 delete(pTemp);returntrue;
}
对函数功能没仔细看!
[/Quote]
这回答有问题,起码第三个是错误的,此函数的作用是扩大缓冲区,你把新声请的空间都delete了,那以后对缓冲区的访问,还能正确吗~
awpatp 2007-11-09
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

bool resizebuff(int **pBuf, int & nBnfSize)
{
if(nBnfSize < 0)
return false;

int nNoneSize = 2 * nBnfSize;
int *pTemp = new int[nNoneSize];

if(pTemp==NULL)
return false;

memset(pTemp, 0, nNoneSize*sizeof(int));

if(*pBuf != NULL)
{
memcpy(pTemp, *pBuf, nBnfSize*sizeof(int));
delete[] *pBuf;
}

*pBuf = pTemp;
nBnfSize=nNoneSize;

return true;
}

bool resizebuff(int* & pBuf, int & nBnfSize)
{
if(nBnfSize < 0)
return false;

int nNoneSize = 2 * nBnfSize;
int *pTemp = new int[nNoneSize];

if(pTemp==NULL)
return false;

memset(pTemp, 0, nNoneSize*sizeof(int));

if(pBuf != NULL)
{
memcpy(pTemp, pBuf, nBnfSize*sizeof(int));
delete[] pBuf;
}

pBuf = pTemp;
nBnfSize=nNoneSize;

return true;
}

int main()
{
int sizeBuf = 10;
int *buf = new int[sizeBuf];
for(int i = 0; i < sizeBuf; i++)
buf[i] = i;

resizebuff(buf, sizeBuf);
for(int i = 0; i < sizeBuf; i++)
cout<< buf[i]<<endl;

resizebuff(&buf, sizeBuf);
for(int i = 0; i < sizeBuf; i++)
cout<< buf[i]<<endl;

return 0;
}
blue_galaxy 2007-11-09
  • 打赏
  • 举报
回复
bool resizebuff(int *pBuf,int &nBnfSize)
{
int nNoneSize;
int *pTemp;
nNoneSize=2*nBnfSize;
pTemp=new int[nNoneSize];
if(pTemp==NULL)
return false;
memset(pTemp,0,nNoneSize*sizeof(int));
memcpy(pTemp,pBuf,nBnfSize);
delete[] pBuf
pBuf=pTemp;
nBufSize=nNoneSize;
return true;
}
1 传入的指针参数 改成对指针的引用
2 memcpy的第三个参数应是字节数
3 在pBuf被pTemp的值覆盖之前应释放pBuf指向的内存 否则会丢失

另外有打错字母 lz不仔细
xiezhenghai 2007-11-09
  • 打赏
  • 举报
回复
memset(pTemp,0,nNoneSize*sizeof(int)); //这句好象有溢出吧
memcpy(pTemp,pBuf,nBnfSize);//传递的前两个参数应该是BYTE型的吧

不太清楚 随便提提
zyb758 2007-11-09
  • 打赏
  • 举报
回复
bool resizebuff(int *pBuf,int &nBnfSize)
{
int nNoneSize;
int *pTemp;
nNoneSize=2*nBnfSize;
pTemp=new int[nNoneSize];
if(pTemp==NULL)
return false;

memset(pTemp,0,nNoneSize*sizeof(int));
memcpy(pTemp,pBuf,nBnfSize); //3.memcpy(...,...,nBnfSize*sizeof(int)); 第三个参数是字节数。
delete [] pBuf;//2.delete
pBuf=pTemp;
nBufSize=nNoneSize; //1.nBnfSize
return true;
}


不知道找的对不对, 不对的地方请多指教。。
另外firefox不能插入源代码,郁闷一下。
HW121 2007-11-09
  • 打赏
  • 举报
回复
bool resizebuff(int *pBuf, int &nBnfSize) //bool resizebuff(int *&pBuf, int &nBnfSize)
Treazy 2007-11-09
  • 打赏
  • 举报
回复

//加入头文件
#include <string.h>
#include <memory.h>
bool resizebuff(int *pBuf, int &nBnfSize)
{
int nNoneSize;
int *pTemp;

nNoneSize = 2*nBnfSize;
pTemp=new int[nNoneSize];

if(pTemp == NULL)
return false;

memset(pTemp,0,nNoneSize*sizeof(int));
memcpy(pTemp,pBuf,nBnfSize); //memcpy不对pTemp和pBuf的重叠部分判断,需要换成memmove

pBuf=pTemp;
nBnfSize = nNoneSize; //nBufSize改成nBnfSize
//加入以下语句
delete(pTemp);
return true;
}

对函数功能没仔细看!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧