首页 > 编程语言 > 详细

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

时间:2019-11-29 11:48:11      阅读:1834      评论:0      收藏:0      [点我收藏+]
警告  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警告

 

 
 

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

原文:https://www.cnblogs.com/bloodmage/p/11956672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!