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结尾的要求。

  • 相关阅读:
    php设计模式 — 简单工厂模式(静态工厂方法模式)
    Vue-Router
    各种选项卡
    jq动画
    如何使用swiper写轮播
    Gulp代码压缩
    闭包
    jquery.validation校验
    grunt-js文件压缩
    CSS
  • 原文地址:https://www.cnblogs.com/zjzyh/p/5773290.html
Copyright © 2011-2022 走看看