Vector 是什么导致了下面代码中的缓冲区溢出错误
无法在下面的代码中找出导致缓冲区溢出的原因。我认为这与矢量有关,但我要防止越界访问。是否还有其他可能导致溢出的原因Vector 是什么导致了下面代码中的缓冲区溢出错误,vector,heap-corruption,address-sanitizer,Vector,Heap Corruption,Address Sanitizer,无法在下面的代码中找出导致缓冲区溢出的原因。我认为这与矢量有关,但我要防止越界访问。是否还有其他可能导致溢出的原因 class Solution { public: bool canPartition(vector<int>& nums) { int sum = 0; bool canPartition = true; vector<vector<int>> dp(nums.size(), vec
class Solution {
public:
bool canPartition(vector<int>& nums) {
int sum = 0;
bool canPartition = true;
vector<vector<int>> dp(nums.size(), vector<int>(sum / 2 + 1, -1));
sum = accumulate(nums.begin(),nums.end(),0);
if (sum % 2 != 0)
{
canPartition = false;
}
if (true == canPartition)
{
canPartition = canPartitionRecursive(nums, 0, sum/2, dp);
}
return canPartition;
}
bool canPartitionRecursive(vector<int>& nums, int index, int sum,
vector<vector<int>>& dp)
{
if (sum == 0)
{
return true;
}
if (index >= nums.size() || sum < 0)
{
return false;
}
if (dp[index][sum] != -1)
{
if (true == canPartitionRecursive(nums, index+1, sum - nums[index],dp))
{
dp[index][sum] = 1;
return true;
}
dp[index][sum] = canPartitionRecursive(nums, index + 1, sum, dp);
}
return dp[index][sum] = 1? true:false;
}
};
类解决方案{
公众:
布尔canPartition(向量和nums){
整数和=0;
bool canPartition=true;
向量dp(nums.size(),向量(sum/2+1,-1));
sum=累计(nums.begin(),nums.end(),0);
如果(总和%2!=0)
{
canPartition=false;
}
if(true==canPartition)
{
canPartition=canPartitionRecursive(nums,0,sum/2,dp);
}
返回分区;
}
布尔canPartitionRecursive(向量和nums、整数索引、整数和、,
向量和dp)
{
如果(总和=0)
{
返回true;
}
如果(索引>=nums.size()||和<0)
{
返回false;
}
如果(dp[索引][总和]!=-1)
{
if(true==canPartitionRecursive(nums,index+1,sum-nums[index],dp))
{
dp[指数][总和]=1;
返回true;
}
dp[index][sum]=canPartitionRecursive(nums,index+1,sum,dp);
}
返回dp[index][sum]=1?真:假;
}
};
这看起来像是一个换位错误(所有子向量的大小都为1):
int和=0;
向量dp(nums.size(),向量(sum/2+1,-1));
sum=累计(nums.begin(),nums.end(),0);
也许应该在dp
初始化之前移动sum
的计算
int sum = 0;
vector<vector<int>> dp(nums.size(), vector<int>(sum / 2 + 1, -1));
sum = accumulate(nums.begin(),nums.end(),0);