#include <windows.h>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int* p;
p = (int*)malloc(10*sizeof(int)); //动态申请了10个int的空间
cout<<p<<endl;
for(int i = 0; i < 8; i++)
*(p+i) = rand(); //随机填上数
for(int i = 0; i < 10; i++)
cout<<*(p+i)<<endl;
int* pDisturb = (int*)malloc(10*sizeof(int)); //加一个干扰
p = (int*)realloc(p,20*sizeof(int)); //重申请的时候 地址就变了
cout<<endl<<p<<endl;
for(int i = 0; i < 10; i++)
cout<<*(p+i)<<endl; //然而内容并没有变,原来的10个数被拷贝过来了
// 【问题来了】它怎么知道我申请了10个空间的?
// 我用什么函数才能得到这个长度:10?
system("pause");
return 0;
}
11 个解决方案
#1
// 【问题来了】它怎么知道我申请了10个空间的?
调用malloc的时候,操作系统会给分配空间。他当然要记得你申请了多少,因为这部分空间不能给别人再用了,直到你调用free。
// 我用什么函数才能得到这个长度:10?
据我所知,没办法。这个长度是系统自己使用的,作为用户没有函数能得到。如果要用,只能从申请的时候就一直保留下来。
调用malloc的时候,操作系统会给分配空间。他当然要记得你申请了多少,因为这部分空间不能给别人再用了,直到你调用free。
// 我用什么函数才能得到这个长度:10?
据我所知,没办法。这个长度是系统自己使用的,作为用户没有函数能得到。如果要用,只能从申请的时候就一直保留下来。
#2
我没有学习过Windows的C++,但是获取空间大小的话不是用sizeof吗?
#3
同一楼,恐怕只能自己保存。
#4
sizeof一个指针,得到的值只是指针长度,一般是4
#5
有一种实现是在申请的指针的前一个位置添加大小计数
但是你不应该这么思考,就是应该记下来
但是你不应该这么思考,就是应该记下来
#6
可以用vc的内存工具看,你可以看到一些有趣的东西
#7
没有办法获得,只有自己保存好申请时的大小,把这个变量之后传给其他函数,C++里处理数组的函数通常要传入数组的指针与数组的大小两个参数,这一点和C#等不同。
#8
你申请的时候,系统是记录了的,可能会在你申请的内存前面记录一下,但是程序不能依赖这样的假定。
#9
int* p;
int size = 10;
p = (int*)malloc(size*sizeof(int));
同其他楼
int size = 10;
p = (int*)malloc(size*sizeof(int));
同其他楼
#10
谢谢一楼和楼下各位
因为经常要动态申请内存,当要存更多的数据大于之前申请的空间时,要realloc扩大内存空间,这时候就要查询之前申请了多大内存
我觉得这是个很常用的东西啊?为什么c就没有捏
#11
写个结构自己保存吧
#1
// 【问题来了】它怎么知道我申请了10个空间的?
调用malloc的时候,操作系统会给分配空间。他当然要记得你申请了多少,因为这部分空间不能给别人再用了,直到你调用free。
// 我用什么函数才能得到这个长度:10?
据我所知,没办法。这个长度是系统自己使用的,作为用户没有函数能得到。如果要用,只能从申请的时候就一直保留下来。
调用malloc的时候,操作系统会给分配空间。他当然要记得你申请了多少,因为这部分空间不能给别人再用了,直到你调用free。
// 我用什么函数才能得到这个长度:10?
据我所知,没办法。这个长度是系统自己使用的,作为用户没有函数能得到。如果要用,只能从申请的时候就一直保留下来。
#2
我没有学习过Windows的C++,但是获取空间大小的话不是用sizeof吗?
#3
同一楼,恐怕只能自己保存。
#4
sizeof一个指针,得到的值只是指针长度,一般是4
#5
有一种实现是在申请的指针的前一个位置添加大小计数
但是你不应该这么思考,就是应该记下来
但是你不应该这么思考,就是应该记下来
#6
可以用vc的内存工具看,你可以看到一些有趣的东西
#7
没有办法获得,只有自己保存好申请时的大小,把这个变量之后传给其他函数,C++里处理数组的函数通常要传入数组的指针与数组的大小两个参数,这一点和C#等不同。
#8
你申请的时候,系统是记录了的,可能会在你申请的内存前面记录一下,但是程序不能依赖这样的假定。
#9
int* p;
int size = 10;
p = (int*)malloc(size*sizeof(int));
同其他楼
int size = 10;
p = (int*)malloc(size*sizeof(int));
同其他楼
#10
谢谢一楼和楼下各位
因为经常要动态申请内存,当要存更多的数据大于之前申请的空间时,要realloc扩大内存空间,这时候就要查询之前申请了多大内存
我觉得这是个很常用的东西啊?为什么c就没有捏
#11
写个结构自己保存吧