请问关于指针内存分配问题?

DJoe-3 2016-04-19 09:58:38
我有一个结构体
typedef struct _struct_{
context* ctx;
connection* cn;
char* type;
} mystruct

mystruct* ms = malloc(sizeof(mystruct));

这里的ctx,cn都是结构体指针,此时用malloc或者初始化么?
如果没有初始化,会产生哪些问题?

谢谢!
...全文
184 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2016-04-26
  • 打赏
  • 举报
回复
给结构体malloc只能是申请了12个字节(32位系统),三个结构提元素都是指针(3×4)那么这三个都是野指针,即若不进行初始化或申请空间(malloc)很有可能会出现内存错误;建议在使用时初始化或为其分配空间;
  • 打赏
  • 举报
回复
有点复杂,倒没用过,内还有指针的,学习学习
一根烂笔头 2016-04-20
  • 打赏
  • 举报
回复
一段没有使用的空间,malloc出来是全0,如果使用过的空间,那么其中可能保留有旧值,这些值对于用户来说是随机数据,会构成潜在的程序bug,C中指针避免操作NULL和野指针
赵4老师 2016-04-20
  • 打赏
  • 举报
回复
其实电脑开机后物理内存的每个字节都是可读写的,从来不会因为所谓的new、delete或malloc、free而被创建、销毁。区别仅在于操作系统内存管理模块在你读写时是否能发现并是否采取相应动作而已。操作系统管理内存的粒度不是字节而是页,一页通常为4KB。
小灸舞 版主 2016-04-20
  • 打赏
  • 举报
回复
mystruct* ms = malloc(sizeof(mystruct)); 此时结构体内的3个指针都是野指针,指着一个未知的区域 如果尝试访问这3个指针所指的区域或者尝试写入那么就会产生异常
Zarten 2016-04-20
  • 打赏
  • 举报
回复
都是野指针,
星光伴月 2016-04-20
  • 打赏
  • 举报
回复
malloc申请到的内存,不会自动清零,很可能是一些垃圾数据。申请成功后应该给它们赋初值,如果不加处理而直接使用,那么里面的指针是野指针,数据是垃圾数据。 如果仅仅是为了将申请到地内存全部清零的话,也可以使用另一个申请内存的函数:calloc,它的原型如下: void * calloc(size_t n,size_t size); 这个函数会自动将申请到的内存清零,相信应该比我们先用malloc再用memset效率更好一些。
paschen 2016-04-20
  • 打赏
  • 举报
回复
在解引这个指针之前,你肯定要malloc或者让这个指针去指向一个已有的对象 否则是个野指针,解引可能导致程序崩溃
CalvinRyan 2016-04-19
  • 打赏
  • 举报
回复
不初始化或者不分配内存是允许的,但是一旦操作到结构体指针的时候一定要分配内存或指向操作,否则操作野指针结局等同于 int main(void) { char *p; *p='a'; return 0; } https://www.zhihu.com/question/35470332
renwotao2009 2016-04-19
  • 打赏
  • 举报
回复
malloc后,memset为0

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧