zoukankan      html  css  js  c++  java
  • C++内存申请容易产生的错误

    1.起因

    前两天用python写了一款工具用来把excel文件转换成json文件,今天给他们用的时候发现在文本下看正常,但是在程序中使用就是会多出一些莫名其妙的字符。

    2. 调查

    原来主要是我写的工具在保存的时候没有在字符串末尾以0结尾,而他们在读取的时候是直接以文件大小读取的,和我平时读取文件申请内存时的操作不太一样。

    // 假如 size 为文件大小
    // 平时我们是这么操作的
    unsigned char * buffer = (unsigned char*)malloc(size + 1);
    
    // 而他们的代码是这样的
    unsigned char * buffer = (unsigned char*)malloc(size);
    

    因为少申请了一位,而申请内存块的地方不一定都是空白的,很有可能会在你读取字符串之后的内存是有数据的,这些多出来的内存会算到你申请的内存中,导致原本你想要size大小的文件实际上却比size大,

    3. 解决

    后来在python里使用了投机的方法,在保存的字符串末尾做了+ ''操作,这样在C++里面操作的时候最后面一位内存肯定是0了,满足C++字符串数组以0结尾的要求。

  • 相关阅读:
    Spring AOP 详解
    java 线程的几种状态
    Atomic
    ConcurrentHashMap原理分析
    MySQL存储过程详解 mysql 存储过程
    spring-定时器(2)
    spring-定时器(1)
    spring-线程池(3)
    spring-线程池(2)
    spring-线程池(1)
  • 原文地址:https://www.cnblogs.com/zjzyh/p/5773290.html
Copyright © 2011-2022 走看看