第一程序获得一片内存空间,并且给这片内存空间赋值,第二个程序将第一程序获得的内存空间的首地址给一个指针,为什么不能将第一程序中初始化的内容输出?
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程序,结果仍然不行?如果是操作系统的缘故,能否告知为何?
----------------解决方案--------------------------------------------------------