C++ 在具有数组成员的类上无效指针/双精度释放
c++ invalid pointer/double free on class with array member
#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似乎都可以消除错误。为什么?这里甚至没有使用?
提前谢谢。
我可以看到您的代码有两个问题。
(1(这应该是导致错误的原因。您不包括string
,iostream
也不需要包含它。这意味着您将从parsing
返回指向 char 的指针,但当parsing
返回时,该指针将被删除。这会导致未定义的行为。
(2(parse
不返回值,但它在其声明中承诺。这可能会导致一些问题。
注意:当您遇到问题时,您应该尝试使用-Wall
(或一直使用(。这会为您捕获这两个错误。
相关文章:
- 如何实现容纳整数和无效指针的双向链表?
- 在基数排序中,我得到 munmap_chunk():无效指针和中止(核心转储).为什么?
- 应用地址清理器后,免费无效指针消失
- C++ 在具有数组成员的类上无效指针/双精度释放
- 不断得到分段错误和free()无效指针
- 使用无效指针初始化指针声明符的行为是否未定义?
- 结构作为参数的函数产生错误:free():无效指针:0x00007efd47b
- 无效指针、隔离标识符等
- c++ 无效指针从空闲列表中取消排队
- C++ munmap_chunk(): 无效指针:
- 为什么我的简单C++程序使用队列和 fstream 错误到无效指针
- 无效指针和非初始化的指针之间的差异
- 如何用无效指针初始化unique_ptr的向量
- 地址清理器在静态强制转换无效指针时报告错误
- MS4:Free(Free()无效指针0xB74E74E0 ***
- ***检测到的GLIBC *** MS2:free():无效指针:0xB7526FF4 ***
- 无效指针功能的输出
- 有人能告诉我这是如何在main()中实现的吗?(关于无效指针的问题)
- C++11使用智能指针,但得到无效指针
- 无效指针的相关性