为啥我在这里收到与内存相关的错误?

Posted

技术标签:

【中文标题】为啥我在这里收到与内存相关的错误?【英文标题】:Why did I get a Memory-related error here?为什么我在这里收到与内存相关的错误? 【发布时间】:2013-03-01 03:48:54 【问题描述】:

我遇到了来自网站的问题。给定stringsst,我必须在s 中找到st 的所有可能组合。例如,

s      = "doomdogged"
st     = "dg"
answer = 4

我可以从 0 或 4 中选择 d,从 6 或 7 中选择 g。这给了我 4 种可能的组合。

这是我的代码:

#include <iostream>
#include <vector>

using namespace std;

string s, st;

bool target[26];
vector<int> positions[26];
vector<vector<int>> possibleCombinations;

void DFS_Enumeration(int, vector<int>*);
int DFS_index_max = 0;

int main(int argc, char *argv[])

    int    answer = 0;
    cin >> s;  //Given a string s
    cin >> st; //Given a string st
    //Find all possible combination of st in s
    for ( int i = 0 ; i < 26 ; ++ i )
        target[i] = 0;
    for ( int i = 0 ; i < st.length() ; ++ i )
        target[st[i] - 97] = 1;
    for ( int i = 0 ; i < 26 ; ++ i )
    
        if ( target[i] == 0 ) continue;
        for ( int j = 0 ; j < s.length() ; ++ j )
        
            if ( s[j] == i + 97 ) positions[i].push_back(j);
        
    
    DFS_index_max = st.length();
    vector<int> trail(0);
    DFS_Enumeration(0, &trail); //Here I got an runtime error
    for ( vector<int> vi : possibleCombinations )
    
        int currentMax = 0;
        for ( int i = 0 ; i < vi.size() ; ++ i )
        
            if ( vi[i] > currentMax )
            
                if ( i == vi.size() - 1 ) ++ answer;
                currentMax = vi[i];
                continue;
            
            else
                break;
        
    
    cout << answer;


void DFS_Enumeration(int index, vector<int>* trail)

    if ( index == DFS_index_max )
    
        possibleCombinations.push_back(*trail);
        return;
    
    for ( int i = 0 ; i < positions[st[index] - 97].size() ; ++ i )
    
        trail -> push_back(positions[st[index] - 97][i]);
        DFS_Enumeration(++index, trail);
        trail -> pop_back();
    
    return;

首先我在st 中查找字符,并根据需要将它们标记为在我的布尔数组目标中找到。

然后,我使用 DFS 枚举所有可能的组合。对于上面的“doomdogged”和“dg”的例子,d存在于0、4、9中。而g存在于6、7中。我会得到06、07、46、47、96、97。

最后,我计算那些有意义的,并输出答案。出于某种原因,我的代码无法运行,并在我标记的行中生成有关内存的运行时错误。

【问题讨论】:

"doomdogged" 末尾的d 怎么样? 我猜这个问题真的想计算子序列,而不是组合。 是的组合。 “doomdogged”末尾的 d 不起作用,因为在它之后不会有任何前面的 gs。 【参考方案1】:

DFS_Enumeration 可能会增加 index 任意次数,因此 st[index] 可能会超过字符串 st 的结尾。

【讨论】:

我一步一步调试,我在那个特定的行得到了错误。我的调试器向我显示了 memory.h 处的错误。

以上是关于为啥我在这里收到与内存相关的错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我会收到“从 '[String]' 转换为不相关的类型 'String' 总是失败”错误?

linux与内存相关的命令

为啥 OpenCV Mat 会造成内存泄漏?

为啥我这里没有错误?

Laravel DB 插入错误:允许的内存大小已用尽

Silex 帮助。谁能解释为啥我在这里收到 404 错误?