查看完整版本: [-- 【问题】Turbo C 下如何获得内存分配的长度? --]

【 浮游城 - Castle in the Sky | 开放邀请注册,PS|SS|WII|DC下载研究中心 】 -> 【 电脑全方位 | Computer All Round 】 -> 【问题】Turbo C 下如何获得内存分配的长度? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

拉菲尔 2006-08-04 18:28

如:
int *dat;
dat = (int *)calloc(1024, sizeof(int));
如果只以dat为函数参数,在函数内部有什么方法能得知dat所指内存的长度呢?

Taburiss 2006-08-07 12:31
SIZEOF...就是取得长度啊……

dolphin 2006-08-07 15:40
malloc

拉菲尔 2006-08-08 06:36
引用
引用第1楼Taburiss2006-08-07 12:31发表的“”:
SIZEOF...就是取得长度啊……

不是吧,T大,sizeof是检测类型大小的,难道有高深的方法,望赐教

to2楼:malloc可以知道大小?

Taburiss 2006-08-08 07:40
sizeof的功能,就包括察看变量的长度啊……
sizeof(object);
那个object基本上就等于anything you can find....
试验一下就知道咯~~:)

拉菲尔 2006-08-08 08:31
如果是这样
int function(int *ptr)
{
  return (sizeof (ptr));
}

能返回指针所指内存的长度吗?

dolphin 2006-08-08 10:07
原来经常去这里
http://www.vcok.com或者vcok.net
里面很详细。

现在有点忘了。反正大概就是
int *pInt=(int *)malloc(1000,sizeof(int)); //意思是开辟了一块内存,大小是1000个INT这么大,也就是相当于2000个字符的大小

之后比如你可以往这里写东西,比如
File *fp=fopen("1.txt","rw+");
之类。
之后把fscan(fp,pInt);
之类//我一直用MFC的,把C的忘的差不多了。

内存分配的长度:是无法取得的,是需要你自己在MALLOC的时候定义多大就是多大。不过一般不超过1MB。我也不清楚为什么,反正C的编程,内存无法定义特别大。可能是DOS编程本身的局限吧。

也可以自己写个函数进行判断。比如
long GetLenFromMemory(unsigned char *pUchr)
{
long i=0;
while(*(pUchr+i))
{
i++;
}
return(i);
}
也可以通过这个办法取得内存里面数据的长度。不过这不是内存的长度,只是里面存在了多长的数据!

Taburiss 2006-08-08 12:35
传统的C里面,用到的内存还是DOS模式下,640k的基本内存~~要用到更多的话,就得使用DOS4GW之类的保护模式的库~~挺麻烦的~~偶也没真正试验过~~

另外……拉拉……作这样一个试验,连3分钟都用不到耶……算上找TC的时间……也不会超过半小时耶……

拉菲尔 2006-08-08 22:43
我就是以前试过不行才问有没有可行的方法的,

至于用xms现在我还不敢想。。。

Taburiss 2006-08-09 09:45
偶手头米有TC~~~
只有VC2005...
做个Win32API console的……试验……
可以取出来~~

dolphin 2006-08-09 13:17
还是visual studio.net2003好。
虽然我有2005Z版。不过一直用2003。
嘿嘿!

拉菲尔 2006-08-10 05:55
引用
引用第9楼Taburiss2006-08-09 09:45发表的“”:
偶手头米有TC~~~
只有VC2005...
做个Win32API console的……试验……
可以取出来~~


那返回的是内存段的大小?我怎么看像是指针的大小。。。


查看完整版本: [-- 【问题】Turbo C 下如何获得内存分配的长度? --] [-- top --]


Powered by PHPWind Code © 2003-08 PHPWind
Gzip enabled

You can contact us