Syscall param open(filename) points to unaddressable byte(s)

valgrind 调试出现如题所示的错误,原因是存取文件名的空间被释放了

源代码:

        cfg->snteam_cfg->snt.score.nd.wrd_dict_db_fn=cfg->wrd_dict_db_fn;

修改之后:

	cfg->snteam_cfg->snt.heap = wtk_heap_new(1024);
	cfg->snteam_cfg->snt.score.nd.wrd_dict_db_fn= wtk_heap_dup_str(cfg->snteam_cfg->snt.heap, cfg->wrd_dict_db_fn);

  

时间: 2024-10-10 17:57:54

Syscall param open(filename) points to unaddressable byte(s)的相关文章

valgrind错误:Syscall param write(buf) points to uninitialised bytes(s)

最近使用valgrind检查代码时,发现了一个比较鬼诡的bug:Syscall param write(buf) points to uninitialised bytes(s) .在百度上找了很长时间的解决方法,但没有找到.最后用google搞清楚了原因,并解决了这个问题. 这是我主要参考的英文网站:http://comments.gmane.org/gmane.comp.debugging.valgrind/7856 由于对齐等原因,我们定义变量等时应该先用memset对其进行初始化.然后再

select引起的服务端程序崩溃问题

现象: 某个线上的服务最近频繁崩溃.该服务使用C++编写,是个网络服务端程序.作为TCP服务端,接收和转发客户端发来的消息,并给客户端发送消息.该服务跑在CentOS上,8G内存.线上环境中,与客户端建立的TCP连接大约在3~4万左右. 使用GDB查看每次崩溃产生的core文件,发现崩溃时的函数调用栈每次都各不相同,而且有时会发生在比较奇怪的地方,比如标准库std::string的析构函数中. 该线上服务崩溃之后,会有监控进程进行重启,因此暂时不会造成太大的影响. 复现: 先尝试在自己的虚拟机环

valgrind的使用、原理

valgrind支持的工具:memcheck  addrcheck cachegrind Massid helgrind  Callgrind 运行时必须指明想用的工具,如果省略工具名,默认运行memcheck 1,memcheck 1),使用未初始化的内存 2),读/写已经被释放的内存 3),读/写内存越界 4),读/写不恰当的内存栈空间 5),内存泄露,指向一块内存的指针永远丢失 6),使用malloc/new/new[]和free/delete/delete[]不匹配 7),memcpy(

[C#参考]byte数组和Image的相互转换

功能需求 1.把一张图片(png bmp jpeg bmp gif)转换为byte数组在内存中操作. 2.把内存中的byte数组转换成Image对象,赋值给相应的控件显示. 3.从图片byte数组得到对应的图片格式,生成一张图片保存到磁盘中. 这个的Image是System.Drawing.Image. //Get an image from file Image image = Image.FromFile("D:\\test.jpg"); Bitmap bitmap = new B

java基本数据类型转换成byte[]数组

import java.io.UnsupportedEncodingException;  public class ConToByte {      /**     * double转换byte     * @param  arr  byte[]     * @param  param    double   double类型的参数     * @param  index  int     */     public static void putDouble(byte[] arr, doub

【转】java byte转long、double、float、int、short,或者long、double、float、int、short转byte

原文网址:http://www.xuebuyuan.com/988752.html java byte与其他数据类型的转换主要用于二进制数据的编码和解码,主要用于网络传输,读写二进制文件,java和c++服务器之间的数据通信等等 以下是总结的源码 /** * BYTE转INT * * @param b * @return */ protected int byteArrayToInt(byte[] b) { return (b[0] << 24) + ((b[1] & 0xFF) &l

byte 常用 操作

/** * 低位在前,高位在后 * * @param data * @return */ private byte[] intToBytes(int value) { byte[] src = new byte[4]; src[3] = (byte) ((value >> 24) & 0xFF); src[2] = (byte) ((value >> 16) & 0xFF); src[1] = (byte) ((value >> 8) & 0xF

将文件转成byte[]文件属组

/** * * @Description : 读取文件数组 * @Method_Name : fileBuff * @param filePath * @return * @throws IOException * @return : byte[] * @Creation Date : 2015年1月27日 下午5:26:49 * @Author : */ public static byte[] fileBuff(String filePath) throws IOException { Fi

byte数据的常用操作函数[转发]

1 /// <summary> 2 /// 本类提供了对byte数据的常用操作函数 3 /// </summary> 4 public class ByteUtil 5 { 6 private static char[] HEX_CHARS = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 7 private static byte[] BITS = {0x01, 0x02, 0x04, 0x0