写程序时经常容易出现内存泄露问题,或者对内寸非法读写都可能导致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 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;
}
记录仅提醒自己搬砖时小心谨慎!