trubo c 动态申请内存的问题

来源:百度知道 编辑:UC知道 时间:2024/05/08 01:26:37
我想问关于 TC 动态申请内存的问题

首先我声明了一个指向字母指针的 指针变量
char ** buffer;
然后

buffer=(char **)malloc(1728*sizeof(char *);
/*等于我申请了1728个指向字母的指针变量所需要的空间 把首起地址给了BUFFER对吧!*/

然后

for(i=0;i<1728;i++)
{ buffer[i]=(char *)malloc(2304);/*这等于我又给每个字符指针又申请了2304个字节空间对吧*/
if(buffer[i]==NULL)
{printf("No memorry to get\n");
getch();
}
}

但是这里问题发生了 报警了 说得不到内存,也就是 我通过动态申请出来的指针变量, 不能给他再动态申请 超过1000字节的内存空间。

但是你看我又这样搞:

char *p;
p=(char *)malloc(4000);
if(p==NULL)
{printf("No memorry to ge\n");
getch(0;}

但奇怪的是这样却可以,也就是说我声明出来的字符指针变量可以动态分配出甚至4000字节的空间。
这个问题我百思不得其解
希望高手赐教
对 我写错了 笔失误 少了括号
不过我只是在这个地方写错了 但在程序里 没有写错
因为如果我少写个括号 是没办法通过编译的

其实我想问的问题很简单
就是为什么我动态分配出来的字符指针 不能再给它分配长度超过1000字节空间?
而我定义出来的字符指针 却可以给他分配甚至超过4000字节的空间呢?

还有就是 高速公路上跑单车这位回答,答案
你说buffer+n(n>=0&& n<1

其实,你已经找到原因了。

turbo c是纯DOS环境,不同于windows下的控制台。纯DOS程序访问的内存只有1MB。

1728×2304 > 1M了,所以DOS不能帮你分内存了。

如果你换用VC++做就不会出现问题。

buffer=(char **)malloc(1728*sizeof(char *);
少括号了吧
buffer=(char **)malloc(1728*sizeof(char *));

char ** buffer;只是一个指针而已,占的地址只是4个字节,buffer[n]之后占用了别的内存地址,就像你用char *p;之后用p[1] = malloc(4000)一样。p[1]并不是一个指针,只是一个地址而已。