C++动态数组中的C6385, C6386警告

Wesley13
• 阅读 717
警告  C6385   从“m”中读取的数据无效: 可读大小为“col*sizeof(int)”个字节,但可能读取了“8”个字节。 警告  C6386   写入到“m”时缓冲区溢出: 可写大小为“col*sizeof(int)”个字节,但可能写入了“8”个字节这两个警告都与动态数组的可变大小与实际使用的下标有关如以下代码

void Knap::dp() {
    // if (n <= 2 || c <= 0) return;

    int** m = new int* [n];
    for (int i = 0; i < n; i++)
        m[i] = new int[c + 1]{ 0 };
    
        ... 
    for (int i = n - 2; i > 0; i--) {
        ...
        for (int j = w[i]; j <= c; j++)
            m[i][j] = max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]);
    }


    m[0][c] = m[1][c];
    if (c >= w[0])
        m[0][c] = max(m[0][c], m[1][c - w[0]] + v[0]);

    ...
    for (int i = 0; i < n; i++)
        delete[] m[i];
    delete[] m;
}

二维数组m申请了 n * (c+1) 大小的空间,维度是变量

但在实际操作中下标用到了 n-2,和m[1][c],因此至少要求n>2

取消第一行的注释,可以消除C6385警告

点赞
收藏
评论区
推荐文章
CuterCorley CuterCorley
3年前
数据分析 常见异常及解决办法(一)
1.Jupyter读取数据警告ParserWarning:Fallingbacktothe'python'enginebecausethe'c'enginedoesnotsupportregexseparators在使用JupyterNotebook读取数据进行分析时,如下:python<ipythoninput
Wesley13 Wesley13
2年前
java面试基本数据类型考点
1、java中,有4个基本类型:byte、short、int、long2、类型范围计算公式:\(2bit1)——(2bit1)1【1byte8bit】(字节(Byte发音:/‘bait/):字节是通过网络传输(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fbaike.ba
Wesley13 Wesley13
2年前
Java 解决Emoji表情过滤问题
Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。!(https://oscimg.oschina.net/oscnet/78996c93aca4143fd8a5ea48a805b617745.png)原因:UTF8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不
Wesley13 Wesley13
2年前
Netty
NettyByteBuf1.1原生的ByteBufferJavaNIO的ByteBuffer被称为字节缓冲区。此类针对字节缓冲区定义了以下六类操作:1.读写单个字节的绝对和相对get和put方法;2.将此缓冲区的连续字节序列传输到数组中的相对批量ge
Wesley13 Wesley13
2年前
Java NIO之缓冲区
JavaNIO之Buffer  Java传统的I/O模型是面向单个字节的,它将输入输出抽象为字节流或字符流。这种单个字节的读取或写入模型的效率比较低,而且不符合操作系统的I/O特点。操作系统的IO是面向字节块的,通常是直接从磁盘中读取一块数据到内存或写入一块数据到磁盘。JavaNIO提供了缓冲区来实现字节块的读写。
Stella981 Stella981
2年前
Lua学习笔记_String(一)
   Lua中的字符串可以包含一个字母也可以是一整本书。用一个字符串表示100K甚至1M的内容在Lua中并不罕见。     在Lua中,字符串是字节的序列。Lua内核中不关心这些字节是什么编码格式。Lua只是单纯地以8bit为单位保存它们,且每个字节可以是任意数字,包括0。这就意味着我们可以用字符串保存任意二进制数据。也可以将Unicode字符串保存为任
Wesley13 Wesley13
2年前
Unix系统编程(五)read系统调用
read系统调用从文件描述符fd所指代的打开文件中读取数据。ssize\_tread(intfd,void\buffer,size\_tcount);count参数指定最多能读取的字节数,buffer提供用来存放输入数据的内存缓冲地址,缓冲区至少应有count个字节。如果buffer的长度不足count怎么办捏。系统调用不会
Stella981 Stella981
2年前
JavaScript学习总结(八)——JavaScript数组
  JavaScript中的Array对象就是数组,首先是一个动态数组,无需预先制定大小,而且是一个像Java中数组、ArrayList、Hashtable等的超强综合体。一、数组的声明  常规方式声明:    1、vararrNamenewArray();//创建一个数组2、vararr
Stella981 Stella981
2年前
Class类文件结构
1、概述  Class文件是一组以8位字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在Class文件中,中间没有添加任何的分隔符,这使得整个Class文件中存储的内容几乎全部是程序运行的必要数据。当遇到需要占用8个字节以上空间的数据项时,则会按照高位在前的方式分隔成多个8位字节进行存储。  Class文件采用一种类似于C语言结构
Wesley13 Wesley13
2年前
CSAPP实验之BUFBOMB
这个实验主要是模拟缓冲区溢出。实验中涉及到3个可执行的二进制文件bufbomb,hex2raw,makecookie。bufbomb是进行缓冲区实验的目标程序;既然是缓冲区溢出实验,肯定得有一个导致缓冲区溢出的条件,这个实验是通过类似于c语言中的gets函数的Gets读取一行数据到固定大小的缓冲区,而当我们的输入超过了缓冲区的大小时,Gets没有任何的边界检