struct结构指针的初始化

博客内容讲述了在编程过程中遇到的结构体指针初始化导致的内存错误。通过示例展示了如何正确分配内存给结构体及其成员,以避免段错误和内存泄露。作者通过修改初始化函数,确保了对结构体指针的合法操作。
摘要由CSDN通过智能技术生成

写程序时经常容易出现内存泄露问题,或者对内寸非法读写都可能导致segment fault.
今天写代码又出现一个酱紫的bug.
结构如下:
typedef struct{
unsigned char* start;
unsigned char* end;
uint32_t curlen;
uint32_t maxlen;
uint32_t leftlen;
}cache;
声明了一个结构指针变量,cache* FCache;
然后对FCache进行初始化,函数如下:
void InitCache(Cache* ca,uint32_t len){
ca->start=(unsigned char*)malloc(len*sizeof(unsigned char));
if(ca->start==NULL){
return NULL;
}
ca->cur=ca->start;
ca->maxlen=len;
ca->curlen=0;
ca->leftlen=ca->maxlen;
return ca;
}
结果报错,段错误。
这个错误非常明显,因为没有对结构ca分配内存,现在又对ca的成员进行赋值,属于非法写内存。
改为
Cache* InitCache(uint32_t len){
Cache* ca = (Cache*)malloc(sizeof(Cache));
if(ca == NULL){
return NULL;
}
ca->start=(unsigned ch

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值