警告 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>2spa
取消第一行的註釋,能夠消除C6385警告code