/*这段是错的*/
while (..) {
path = (int*)malloc(sizeof(int));
path [i++] = t;
...
}
/*我想实现的是这种一个一个开辟空间的动态数组,因为并不知道有多少个数据*/
查到的都是知道数据总个数之后创建数组,或者在需要扩充数组大小的时候,开辟更大的空间,然后把原数组拷贝过去。
我能想到的是建立链表,两遍循环。
不知道还有没有其他更简单的办法创建动态数组,求教!
(刚看到 说不知道个数时没办法用malloc,只能用链表,或者vector?)
有realloc()函数可以重新申请大小。具体如下:(如有帮助,请采纳一下,谢谢。)
1、 realloc()函数可以重用或扩展以前用malloc()、calloc()及realloc()函数自身分配的内存。
2、 realloc()函数需两个参数:一个是包含地址的指针(该地址由之前的malloc()、calloc()或realloc()函数返回),另一个是要新分配的内存字节数。
3、 realloc()函数分配第二个参数指定的内存量,并把第一个参数指针指向的之前分配的内容复制到新配的内存中,且复制的内容长度等于新旧内存区域中较小的那一个。即新内存大于原内存,则原内存所有内容复制到新内存,如果新内存小于原内存,只复制长度等于新内存空间的内容。
4、realloc()函数的第一个参数若为空指针,相当于分配第二个参数指定的新内存空间,此时等价于malloc()、calloc()或realloc()函数。
5、如果是将分配的内存扩大,则有以下3种情况:
如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。
如果当前内存段后面的空闲字节不够,那么就使用堆中的第一个能够满足这一要求的内存块,将目前的数据复制到新的位置,并将原来的数据块释放掉,返回新的内存块位置。
如果申请失败,将返回NULL,此时,原来的指针仍然有效。
可以用malloc或者vector
vector:
//需要头文件vector.h
//定义容器num存入原始数据
vector<int> num;//定义一个vector数组array
int number;
while (1) {
cin >> number;
num.push_back(number);//每输入一个数字就把它添加到数组的最后
if (cin.get() == '\n')//如果是回车符则跳出循环
break;
}
int n = num.size();//返回数组长度为len
//将容器转换为int数组buffer
int *buffer = new int[num.size()];
if (!num.empty()){
memcpy(buffer, &num[0], num.size()*sizeof(int));
}