标签:拷贝 超过 malloc 应该 nbsp 同事 let cli 释放
最近改用户组管理项目bug时,遇到一个关于内存分配的问题。原来是同事用一个长度为4096的字符数组分配内存,strncpy()函数造成拷贝错误,导致用户组管理编辑、添加和删除功能不可用。
虽然是个小问题,但是内存分配一直都是很重要的,严重时会导致系统崩溃。
项目中的内存分配方式就是栈分配,静态分配,当输入的变量长度超过字符数组最大长度时,内存越界。
static int deleteRedUsr(int groupID, char *users, long long eventID) { /* some code */ char usrs[4096] = {0}; //当strlen(users) > 4094则会内存越界 strncpy(usrs, users, strlen(users)); /* some code */ }
解决方案:不推荐扩大字符数组,而应该使用动态分配内存
static int deleteRedUsr(int groupID, char *users, long long eventID) { /* some code */ char *usrs = NULL; usrs = (char *)malloc(strlen(users) + 1); //动态分配内存 strcpy(usrs, users); /* some code */ }
标签:拷贝 超过 malloc 应该 nbsp 同事 let cli 释放
原文地址:https://www.cnblogs.com/yusq77/p/10827460.html