主题 : 【问题】Turbo C 下如何获得内存分配的长度?
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
楼主  发表于: 2006-08-04 18:28

【问题】Turbo C 下如何获得内存分配的长度?

如:
int *dat;
dat = (int *)calloc(1024, sizeof(int));
如果只以dat为函数参数,在函数内部有什么方法能得知dat所指内存的长度呢?
枯れない花
级别: 论坛版主
UID: 11
精华: 0
发帖: 2266
威望: 8 星
金钱: 381185 浮游币
贡献值: 8813 点
好评度: 7896 点
人气: 1049 点
在线时间: 1384(时)
注册时间: 2004-03-24
最后登录: 2023-04-20
沙发  发表于: 2006-08-07 12:31

SIZEOF...就是取得长度啊……
凡交,近则必相糜以信,远则必忠之以言。
级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
板凳  发表于: 2006-08-07 15:40

malloc
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
地板  发表于: 2006-08-08 06:36

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

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

to2楼:malloc可以知道大小?
枯れない花
级别: 论坛版主
UID: 11
精华: 0
发帖: 2266
威望: 8 星
金钱: 381185 浮游币
贡献值: 8813 点
好评度: 7896 点
人气: 1049 点
在线时间: 1384(时)
注册时间: 2004-03-24
最后登录: 2023-04-20
草席  发表于: 2006-08-08 07:40

sizeof的功能,就包括察看变量的长度啊……
sizeof(object);
那个object基本上就等于anything you can find....
试验一下就知道咯~~:)
凡交,近则必相糜以信,远则必忠之以言。
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
5楼  发表于: 2006-08-08 08:31

如果是这样
int function(int *ptr)
{
  return (sizeof (ptr));
}

能返回指针所指内存的长度吗?
级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
6楼  发表于: 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);
}
也可以通过这个办法取得内存里面数据的长度。不过这不是内存的长度,只是里面存在了多长的数据!
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



枯れない花
级别: 论坛版主
UID: 11
精华: 0
发帖: 2266
威望: 8 星
金钱: 381185 浮游币
贡献值: 8813 点
好评度: 7896 点
人气: 1049 点
在线时间: 1384(时)
注册时间: 2004-03-24
最后登录: 2023-04-20
7楼  发表于: 2006-08-08 12:35

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

另外……拉拉……作这样一个试验,连3分钟都用不到耶……算上找TC的时间……也不会超过半小时耶……
凡交,近则必相糜以信,远则必忠之以言。
新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
8楼  发表于: 2006-08-08 22:43

我就是以前试过不行才问有没有可行的方法的,

至于用xms现在我还不敢想。。。
枯れない花
级别: 论坛版主
UID: 11
精华: 0
发帖: 2266
威望: 8 星
金钱: 381185 浮游币
贡献值: 8813 点
好评度: 7896 点
人气: 1049 点
在线时间: 1384(时)
注册时间: 2004-03-24
最后登录: 2023-04-20
9楼  发表于: 2006-08-09 09:45

偶手头米有TC~~~
只有VC2005...
做个Win32API console的……试验……
可以取出来~~
凡交,近则必相糜以信,远则必忠之以言。
级别: 模拟之星
UID: 17726
精华: 0
发帖: 2664
威望: 0 星
金钱: 2638 浮游币
贡献值: 0 点
好评度: 5506 点
人气: 0 点
在线时间: 695(时)
注册时间: 2005-02-16
最后登录: 2011-09-13
10楼  发表于: 2006-08-09 13:17

还是visual studio.net2003好。
虽然我有2005Z版。不过一直用2003。
嘿嘿!
虽然你我今生无缘,但我希望在来生再遇见你,即使那时你我已经忘了一切。



新新航向
级别: 模拟名流
UID: 294
精华: 1
发帖: 7668
威望: 4 星
金钱: 92 浮游币
贡献值: 54 点
好评度: 12540 点
人气: 74 点
在线时间: 268(时)
注册时间: 2004-03-26
最后登录: 2023-04-11
11楼  发表于: 2006-08-10 05:55

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


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