c++程序出现exit code -1073740940 (0xC0000374)
PHPz
PHPz 2017-04-17 15:02:18
0
2
1449

一道动态规划的算法题.
dp是我用new关键字分配的一个整形数组用来记录转移量,在程序51行使用"delete []dp;"去释放内存
出现exit code -1073740940 (0xC0000374)的错误,用的是gnu++11

#include  #include  using namespace std; vector get_pisor(int num) { vector vec; for (int i = 2; i < num; ++i) { if (num % i == 0) { vec.push_back(i); } } return vec; } int max_step(int v_start, int v_end) { if (v_start >= v_end) { return -1; } int start = v_start; int end = v_end; int rslt; int *dp = new int[end - start + 1]; //初始化所有dp内的元素 for (int i = start; i <= end; ++i) { dp[i] = 0; } vector vec; for (int i = start; i <= end; ++i) { vec = get_pisor(i); //如果向量为空,说明在该步不存在约数,无法到达end if (vec.empty()) { dp[i] = 0; } else { vector::iterator iter; for (iter = vec.begin(); iter != vec.end(); ++iter) { if (dp[i + (*iter)] == 0) { dp[i + (*iter)] = dp[i] + 1; } else { dp[i + (*iter)] = (dp[i] + 1) > dp[i + (*iter)] ? dp[i + (*iter)] : dp[i] + 1; } } vec.clear(); } } rslt = dp[v_end]; delete []dp; return rslt; } int main() { int rslt = max_step(4, 24); cout<

按理说我动态申请的数组在使用最后delete应该是没问题的吧,但不知道为什么会出现这个错误,还请指教

PHPz
PHPz

学习是最好的投资!

reply all (2)
巴扎黑

我貌似看到了数组初始化的错误.如下图, 先解决这个问题. 其他再说.

    Peter_Zhu

    原因出在dp[i + (*iter)]这里, 这里的数组索引最大必定会超过end,使用2倍的end可以解决这个问题
    delete释放的数量应该就是new出来的数量,而剩下的没有被释放干净,所以程序会core掉

      Latest Downloads
      More>
      Web Effects
      Website Source Code
      Website Materials
      Front End Template
      About us Disclaimer Sitemap
      php.cn:Public welfare online PHP training,Help PHP learners grow quickly!