zoukankan      html  css  js  c++  java
  • C++动态数组中的C6385, C6386警告

    警告  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警告

     
     
  • 相关阅读:
    UVA756
    SP30906
    SP32900
    CF940F
    洛谷P5030
    洛谷P5142
    洛谷P2569
    网络流 24 题做题记录
    矩阵
    二分图
  • 原文地址:https://www.cnblogs.com/bloodmage/p/11956672.html
Copyright © 2011-2022 走看看