结构体指针在使用完free后,该指针所指向的内存区域是什么,这个指针是变成了NULL,还是野指针。
6个回答
展开全部
free后,该指针指向的内存区域被系统回收,但里面内容还是释放前的内容,只是被系统回收后,有可能马上又被其他地方申请出来使用,所以free后再去读取这块内存的内容就可能是不可预知的内容了。
free函数不会改变被释放指针的值,也就是说free后该指针还指向被释放的空间,一般需要特别对其赋值为NULL。
free函数不会改变被释放指针的值,也就是说free后该指针还指向被释放的空间,一般需要特别对其赋值为NULL。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
结构体指针在使用完free后,该指针所指向的内存区域还是原来的区域,除非该地区又被系统派别的用处。
_msize() 返回 动态分配的 实际 内存大小。
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
struct ss {int x,y;
};
int main()
{
struct ss *S;
int i;
S = (struct ss*) malloc (sizeof(struct ss) * 3);
for (i=0;i<3;i++) { S[i].x=i; S[i].y=i*10;}
for (i=0;i<3;i++) printf("%d ", S[i].x);for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));
free(S); // 释放for (i=0;i<3;i++) printf("%d ", S[i].x);
for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));
return(0);
}
输出结果:
0 1 2 0 10 20
size=32
0 1 2 0 10 20
size=0
===
释放后,内存大小为0,但数值还在。
_msize() 返回 动态分配的 实际 内存大小。
#include<stdio.h>#include<stdlib.h>
#include<malloc.h>
struct ss {int x,y;
};
int main()
{
struct ss *S;
int i;
S = (struct ss*) malloc (sizeof(struct ss) * 3);
for (i=0;i<3;i++) { S[i].x=i; S[i].y=i*10;}
for (i=0;i<3;i++) printf("%d ", S[i].x);for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));
free(S); // 释放for (i=0;i<3;i++) printf("%d ", S[i].x);
for (i=0;i<3;i++) printf("%d ", S[i].y);
printf("\nsize=%d\n", _msize(S));
return(0);
}
输出结果:
0 1 2 0 10 20
size=32
0 1 2 0 10 20
size=0
===
释放后,内存大小为0,但数值还在。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询