在C ++

时间:2019-07-05 17:07:06

标签: c++ arrays

背景

当我用leetcode解决动态编程问题时,我使用了 像dp[m][n]={0}这样的语句来初始化数组,但有时无法将数组设置为全零,从而导致错误的答案。

解决方案

但是,在将代码更改为memset(dp,0,sizeof(dp))之后,dp数组已成功初始化。

class Solution {
public:
    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
         int m  = obstacleGrid.size();
         int n = obstacleGrid[0].size();
         unsigned long dp[m][n];// 
         //unsigned long dp[m][n] = {0}; // failed when printed out
         memset(dp,0,sizeof(dp)); // success

         //....
}
}

我的问题

我当时认为问题是由于数组大小是动态的。这意味着我初始化二维动态数组的方式是错误的。应该使用指针或向量初始化这种动态尺寸的2d数组。

但是令我困扰的是,从另一个角度来看,二维数组是存储在堆栈中的局部变量。这意味着函数返回时使用的空间将是可用的。 这样,每次2d数组都会使用dp[m][n] ={0}获得一些全新的全零空间。不幸的是,结果证明我错了,我必须使用memset()来确保将数组初始化为全零。 因此,我想知道有人可以在此C ++方面给我一些帮助。

0 个答案:

没有答案