【新手提问】C++里,一个未知长度的动态数组,在长度增加的同时,也要给这个数组赋值,如何实现?

cnw2015 2017-10-23 05:47:50
如题。我想用realloc,但是网上找的代码要交换指针
int main(int argc, char* argv[])
{
char *p,*q;
p = (char *)malloc(10);
q = p;
p = (char *)realloc(p,10);
printf("p=0x%x/n",p);
printf("q=0x%x/n",q);

return 0;
}

然而我并不知道这个数组长度何时停止增加,而且,在长度增加的时候我就要给它赋值。
想法用代码表示:
int length = 0;//数组长度
int *p = NULL;//动态数组
p = (int *)malloc(1);//初始定义数组长度为1
for(int i = 0; i<max_cnt; i++)
{
switch(condition)
{
case con1:
length++;//满足条件,数组长度增加,每次只+1
p = realloc(p, length);//给数组自身扩容,我知道这样写是不对的,求教如何实现
p[length-1] = i;//给最新扩充的该int空间赋值
break;

//... 其他 case
}
}
...全文
962 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cnw2015 2017-12-29
  • 打赏
  • 举报
回复
统一回复,谢谢大佬们的回复,有段时间没上了,当时确实是通过Vector解决的
codedoctor 2017-10-25
  • 打赏
  • 举报
回复
strncpy还是用memset好一点。
codedoctor 2017-10-25
  • 打赏
  • 举报
回复
额。是P+i
codedoctor 2017-10-25
  • 打赏
  • 举报
回复
。。。。虽然不知道你为何有此疑惑,不过很简单,可以参考以下strncpy的实现,步骤如下: 1、一个变量i记录下当前最后一个地址的位置,一个变量num记录大小(初始化的时候还是以2为倍数),头指针为P 2、有新值出现的时候,如果没有超过当前空间大小,则放在P+num的位置 3、如果超过当前空间大小,则malloc申请 2*num的空间大小给新的指针newP,然后用strncpy直接吧前面的所有字节复制过去,然后令P=newP,一直循环
赵4老师 2017-10-24
  • 打赏
  • 举报
回复
百度搜相关关键字。
自信男孩 2017-10-24
  • 打赏
  • 举报
回复
realloc可以用原来的指针,通过realloc申请的空间,是做两部分功能:1.申请新的大小的空间;2.拷贝数据(若新申请的内存空间不连续),将数据拷贝到新的地址空间里;若新申请的内存空间(堆上的)较之前的小,那么新数据会丢失;
零隐 2017-10-24
  • 打赏
  • 举报
回复
动态申请内存,所申请的新内存会保留原来的值吗。
帅得不敢出门 2017-10-24
  • 打赏
  • 举报
回复
参考下vector的实现, 初始时先maloc特定大小的空间,比如32, 如果后面要满的时候再根据你要插入数据的数量来realloc大一点比如少的数据加32,大的话可以加256之类。
everlastlucas 2017-10-24
  • 打赏
  • 举报
回复
用std::vector或者自己写一个简易vector类封装动态数组
FoolCarpe 2017-10-24
  • 打赏
  • 举报
回复
不是很理解,C++处理动态数组为什么不用std::vector?

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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