#include <iostream>
using namespace std;
const int ALPHABET = 26;
const int LANG = 4;
const double TOLK[LANG][ALPHABET]= {{0}};
class Text
{
private:
string sample;
int* histogram;
double* rel_histogram;
int sample_size;
public:
Text();
~Text();
string parse();
};
string parsing(const double TOLK[][ALPHABET], double rel_occurence_arr[]);
int main()
{
Text myText;
myText.parse();
return 0;
}
Text::Text(){
sample = "";
histogram = new int[ALPHABET];
rel_histogram = new double[ALPHABET];
sample_size = 0;
}
Text::~Text(){
delete[] histogram;
delete[] rel_histogram;
}
string Text::parse(){
parsing(TOLK, rel_histogram);
//Invalid pointer here
}
string parsing(const double TOLK_HJALP[][ALPHABET], double rel_occurence_arr[]){
return "test";
}
这是较大代码的一部分,但是我已经剥离了所有可能的东西,直到仅剩下导致错误的部分为止。像这样运行会导致无效的指针错误,使用所有其他位运行它会导致双重释放/损坏错误。但是我认为,如果我可以在这个级别上解决问题,那么我可能可以在更大范围内解决问题。
从我收集到的信息来看,我认为Text类正在尝试删除解析函数返回时已删除的内容。我不知道这是否正确,但是如果是这样,我不知道如何阻止它发生。是否发送副本并不重要(以尝试的方式发送,也许有不止一种方式了?)。
而且,无论出于何种原因,从包含中删除iostream似乎都可以删除错误。这是为什么?它甚至不在这里使用?
谢谢。
答案 0 :(得分:0)
我的代码有两个问题。
(1)这应该是导致您的错误的原因。您不包括string
,并且iostream
不需要包括它。这意味着您正在从parsing
返回指向char的指针,但是当parsing
返回时该指针将被删除。这将导致不确定的行为。
(2)parse
不会返回值,但会在其声明中承诺。这可能会导致一些问题。
注意:遇到问题时(或一直),您应该尝试使用-Wall
。那将为您抓住这两个错误。