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

1警告 C6385 从“m”中读取的数据无效: 可读大小为“col*sizeof(int)”个字节,但可能读取了“8”个字节。 警告 C6386 写入到“m”时缓冲区溢出: 可写大小为“col*sizeof(int)”个字节,但可能写入了“8”个字节这两个警告都与动态数组的可变大小与实际使用的下标有关如以下代码 2 3void Knap::dp() { 4 // if (n <= 2 || c <= 0) return; 5 6 int** m = new int* [n]; 7 for (int i = 0; i < n; i++) 8 m[i] = new int[c + 1]{ 0 }; 9 10 ... 11 for (int i = n - 2; i > 0; i--) { 12 ... 13 for (int j = w[i]; j <= c; j++) 14 m[i][j] = max(m[i + 1][j], m[i + 1][j - w[i]] + v[i]); 15 } 16 17 18 m[0][c] = m[1][c]; 19 if (c >= w[0]) 20 m[0][c] = max(m[0][c], m[1][c - w[0]] + v[0]); 21 22 ... 23 for (int i = 0; i < n; i++) 24 delete[] m[i]; 25 delete[] m; 26}

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

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

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

点赞
收藏

评论区

加载中...

相关推荐

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

数据分析 常见异常及解决办法(一)

1.Jupyter读取数据警告ParserWarning:Fallingbacktothe'python'enginebecausethe'c'enginedoesnotsupportregexseparators在使用JupyterNotebook读取数据进行分析时,如下:python<ipythoninput

Java 解决Emoji表情过滤问题

Emoji表情从三方数据中获取没有过滤,导致存入DB的时候报错。!(https://oscimg.oschina.net/oscnet/78996c93aca4143fd8a5ea48a805b617745.png)原因:UTF8编码有可能是两个、三个、四个字节。Emoji表情是4个字节,而Mysql的utf8编码最多3个字节,所以数据插不

Netty

NettyByteBuf1.1原生的ByteBufferJavaNIO的ByteBuffer被称为字节缓冲区。此类针对字节缓冲区定义了以下六类操作:1.读写单个字节的绝对和相对get和put方法;2.将此缓冲区的连续字节序列传输到数组中的相对批量ge

Java NIO之缓冲区

JavaNIO之Buffer  Java传统的I/O模型是面向单个字节的,它将输入输出抽象为字节流或字符流。这种单个字节的读取或写入模型的效率比较低,而且不符合操作系统的I/O特点。操作系统的IO是面向字节块的,通常是直接从磁盘中读取一块数据到内存或写入一块数据到磁盘。JavaNIO提供了缓冲区来实现字节块的读写。

Unix系统编程(五)read系统调用

read系统调用从文件描述符fd所指代的打开文件中读取数据。ssize\_tread(intfd,void\buffer,size\_tcount);count参数指定最多能读取的字节数,buffer提供用来存放输入数据的内存缓冲地址,缓冲区至少应有count个字节。如果buffer的长度不足count怎么办捏。系统调用不会