tfnmdmx 2021-05-29 13:32 采纳率: 83.3%
浏览 56
已采纳

动态数组,malloc,不知道数组个数时怎么动态创建数组?

/*这段是错的*/
		while (..) {
			 
			path = (int*)malloc(sizeof(int));
			path [i++] = t;
		...
		}
/*我想实现的是这种一个一个开辟空间的动态数组,因为并不知道有多少个数据*/

查到的都是知道数据总个数之后创建数组,或者在需要扩充数组大小的时候,开辟更大的空间,然后把原数组拷贝过去。

我能想到的是建立链表,两遍循环。

不知道还有没有其他更简单的办法创建动态数组,求教!

(刚看到 说不知道个数时没办法用malloc,只能用链表,或者vector?)

  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-05-29 14:54
    关注

    有realloc()函数可以重新申请大小。具体如下:(如有帮助,请采纳一下,谢谢。)

     1、 realloc()函数可以重用或扩展以前用malloc()、calloc()及realloc()函数自身分配的内存。

    2、 realloc()函数需两个参数:一个是包含地址的指针(该地址由之前的malloc()、calloc()或realloc()函数返回),另一个是要新分配的内存字节数。

    3、 realloc()函数分配第二个参数指定的内存量,并把第一个参数指针指向的之前分配的内容复制到新配的内存中,且复制的内容长度等于新旧内存区域中较小的那一个。即新内存大于原内存,则原内存所有内容复制到新内存,如果新内存小于原内存,只复制长度等于新内存空间的内容。

    4、realloc()函数的第一个参数若为空指针,相当于分配第二个参数指定的新内存空间,此时等价于malloc()、calloc()或realloc()函数。

    5、如果是将分配的内存扩大,则有以下3种情况:
            如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。  
            如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。
            如果申请失败,将返回NULL,此时,原来的指针仍然有效。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效