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>2spa

取消第一行的註釋,能夠消除C6385警告code

相關文章
相關標籤/搜索