c++ - strdup 和免费使用

标签 c++ c free strdup

我正在尝试这段代码:

imei=Found_imei(pClient->GetBuffer());
printf("6. CODICE IMEI %s \n",imei); 
pClient->SetImei(imei);
printf("6.1 CODICE IMEI %s \n",pClient->GetImei());
free(imei); <<<<<<<<<<<<<<
printf("6.2 CODICE IMEI %s \n",pClient->GetImei());

在哪里

char *Found_imei(char *string) 
{
char *start;
char *end;
char str[40];
int l;

start=strstr(string,"imei:");

strstr(start,",");

l=end-start-5;
strncpy(str,start+5,l);
str[l]='\0';
return strdup(str); <<<<<<<<<<<<<<<<< 
}

free 命令后,printf 出错

我在使用 strdup 和 free 时出错了?

谢谢

最佳答案

我猜 htat GetImeiSetImeichar* 类型字段的薄包装器。如果是这种情况,则 free 调用将释放支持 char* 值的内存。因此,在 free 之后调用 GetImei 正在访问已释放的内存,因此具有未定义的行为

关于c++ - strdup 和免费使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20059624/

相关文章:

c++ - "candidate template ignored: could not match ..."用于模板函数的模板函数参数

c - undefined reference ... 使用 gtk 图形

C++:构造函数问题

c++ - QStyledItemDelegate::paint - 为什么我的文本没有正确对齐?

c++ - C/C++ C4047 的间接级别与 'int' 不同?

c - 如何在 C 中将 char 指针转换为 float?

c - 是否存在一种无需使用全局变量即可在 atexit 或类似程序中释放内存的方法?

C 调整动态数组的大小

C: free() 无效指针;无需更改地址

c++ - 如何使用函数指针作为参数初始化模板的静态成员