찾다

 >  Q&A  >  본문

c++程序出现exit code -1073740940 (0xC0000374)

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

#include <iostream>
#include <vector>

using namespace std;

vector<int> get_pisor(int num)
{
    vector<int> 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<int> vec;
    for (int i = start; i <= end; ++i) {
        vec = get_pisor(i);
        //如果向量为空,说明在该步不存在约数,无法到达end
        if (vec.empty()) {
            dp[i] = 0;
        } else {
            vector<int>::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<<rslt<<endl;
}

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

PHPzPHPz2803일 전1552

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-17 15:04:18

    배열 초기화 시 오류가 발생한 것 같습니다. 먼저 이 문제를 해결해 보세요.

    회신하다
    0
  • 天蓬老师

    天蓬老师2017-04-17 15:04:18

    이유는 dp[i (*iter)]에 있습니다. 여기서 최대 배열 인덱스는 end를 2번 사용하면 이 문제를 해결할 수 있습니다.
    삭제로 해제된 숫자가 되어야 합니다. by new 나머지는 깔끔하게 공개되지 않아서 프로그램이 핵심이 됩니다

    회신하다
    0
  • 취소회신하다