当前位置: 代码迷 >> C语言 >> 这是为什么啊?
  详细解决方案

这是为什么啊?

热度:169   发布时间:2006-02-17 22:53:00.0
这是为什么啊?

第一程序获得一片内存空间,并且给这片内存空间赋值,第二个程序将第一程序获得的内存空间的首地址给一个指针,为什么不能将第一程序中初始化的内容输出?
A程序
/*
获得一片内存空间,将首地址给另外一个程序,
用另外一个程序来访问这个空间中的内容
*/

#include <stdio.h>
#define Number_zero 0;
#define Number_ten 10

void main(void)
{
int *ptri; /*获得的一片内存空间的首地址指针*/
int i=Number_zero; /*循环变量*/

ptri=(int *)malloc(sizeof(int)*Number_ten); /*获得首地址*/

printf("ptri==%x\n",ptri); /*打印首地址*/
getch();


for(;i<Number_ten;i++) /*给这片内存空间赋值*/
{
ptri[i]=i;
}

i=Number_zero ;

for(;i<Number_ten;i++) /*输出这片内存空间的内容*/
{
printf("ptri[%d]==%d\n",i,ptri[i]);

}
printf("\n");
printf("ptri(10)==%d\n",ptri);
printf("ptri(16)==%x",ptri);
getch();


}


B程序
/*
输入一片内存空间的首地址
将这片内存空间中的内容输出来
*/

#include <stdio.h>
#define Number_zero 0
#define Number_ten 10

void main(void)
{
int *ptr;
int i=Number_zero;

printf("Please input the add(16):");
scanf("%x",&ptr);

printf("ptr==%x\n",ptr);

for(;i<Number_ten;i++)
{
printf("ptr[%d]=%d\n",i,*ptr);
ptr++;
}

printf("\n");
printf("ptr(10)==%d\n",ptr);
printf("ptr(16)==%x",ptr);
getch();
}


----------------解决方案--------------------------------------------------------
A程序执行完之后,ptri申请的内存已经被释放

因为如果A程序后面不管加不加free(ptri); B程序的执行结果都是一样的
----------------解决方案--------------------------------------------------------
异想天开,我能说的只有这四个字。深入了解你的系统平台再来考虑这个问题吧。
----------------解决方案--------------------------------------------------------
在a程序没有结束的时(还没有执行getch();),该片内存没有释放啊?此时来执行b程序,结果仍然不行?如果是操作系统的缘故,能否告知为何?
----------------解决方案--------------------------------------------------------
  相关解决方案