我有一个程序,它从数据库中找到类似的字符串,包含数百万个长度相同的字符串m
。我程序的输入是一个长度为n
的字符串(>>> m
)。程序检查长度为m
的每个子字符串。它是用c ++实现的并使用OpenMP,但是我为下面的代码得到了分段错误。该字符串仅包含四个字符A
,B
,C
和D
。程序找到相似的字符串,如果汉明距离小于给定值,则计算每个字符的出现次数(将其存储在ARR
)
std::map<char, int> mapp = {{'A', 0}, {'B', 1}, {'C', 2}, {'D', 3}};
int **ARR = (int**) malloc(sizeof(int*)*n);
for(int z=0; z<n; z++)
ARR[z] = (int*) malloc(sizeof(int)*4);
for(int i=0; i<n; i++)
for(int j=0; j<4; j++) ARR[i][j] = 0;
vector<string> V;
#pragma omp parallel for private(V) shared(ARR)
for(int i=0; i<str.length()-m-1; i++){
std::string substr = str.substr(i, m);
for(int j=0; j<N; j++){ // N number of databases to search
V = retrieve(substr); // find similar strings
for(int k=0; k<(int)V.size(); ++k) {
int hd = hamming_distance(substr, V[k]); // no. of mismatches between substr and kth element of V
if( h < minHD){
for(int l=0; l<m; l++){
char c = V[k][l];
#pragma omp critical
{
ARR[j+l][mapp.at(c)]++;
}
}
}
}
}
}
我只是想知道是否存在任何竞争条件,因为嵌套循环会产生seg错误。任何帮助将不胜感激。