malloc和free在开发中遇到的问题
2016-03-18 17:08
246 查看
用C语言写的GPRS模块驱动代码,想在PC上测试,于是用Qt写了个界面,调用C写的驱动代码,于是碰到鬼了
跑完以上这个函数有几率会出现内存错误!
查原因查到哭,还来是用固定数组来当缓冲区就没事了,不知道malloc和free是什么鬼,于是换个平台试试
static void at_send(char* context)
{
int context_len;
char* buf;
context_len = strlen(context) + 5;
buf = (char*)malloc(context_len);
memset(buf,0,context_len);
buf[0] = 'A';
buf[1] = 'T';
strcat(buf+2,context);
buf[context_len+2] = '\r';
buf[context_len+3] = '\n';
buf[context_len+4] = '\0';
// ͨ¹ý´®¿Ú·¢ËÍ
//RS232_Tx(buf,context_len);
free(buf);
buf = NULL;
}在Keil4中编译,LPC1768上运行,结果主函数都进不了,一直在启动代码里面循环!!!
有木有大神对底层熟悉的给我解释解释,malloc和free这两个标C中的函数怎么会出鬼?
在此先谢过!
static void at_send(char* context) { int context_len; char* buf; context_len = strlen(context) + 5; qDebug("context_len: %d",context_len); buf = (char*)malloc(context_len); memset(buf,0,context_len); buf[0] = 'A'; buf[1] = 'T'; strcat(buf+2,context); buf[context_len+2] = '\r'; buf[context_len+3] = '\n'; buf[context_len+4] = '\0'; qDebug() << buf; RS232_Tx(buf,context_len); qDebug() << "free buf !"; free(buf); buf = NULL; }
跑完以上这个函数有几率会出现内存错误!
查原因查到哭,还来是用固定数组来当缓冲区就没事了,不知道malloc和free是什么鬼,于是换个平台试试
static void at_send(char* context)
{
int context_len;
char* buf;
context_len = strlen(context) + 5;
buf = (char*)malloc(context_len);
memset(buf,0,context_len);
buf[0] = 'A';
buf[1] = 'T';
strcat(buf+2,context);
buf[context_len+2] = '\r';
buf[context_len+3] = '\n';
buf[context_len+4] = '\0';
// ͨ¹ý´®¿Ú·¢ËÍ
//RS232_Tx(buf,context_len);
free(buf);
buf = NULL;
}在Keil4中编译,LPC1768上运行,结果主函数都进不了,一直在启动代码里面循环!!!
有木有大神对底层熟悉的给我解释解释,malloc和free这两个标C中的函数怎么会出鬼?
在此先谢过!
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法