我已经创建了一个应该构建对称toeplitz矩阵的类(see here)。在类的实现在这里释放对象错误校验和 - 打印时发生错误
class toeplitz{
private:
int size;
double* matrix;
public:
toeplitz(const double* array, const int dim){
size = dim;
matrix = new double(size*size);
for(int i = 0; i < size; i++){
for (int j = 0; j < size; j++){
int index = std::abs(i - j);
matrix[i*size + j] = array[index];
}
}
}
~toeplitz(){
delete[] matrix;
}
void print() const{
//loop over rows
for (int i = 0; i < size; i++){
//loop over colums
for (int j = 0; j < size; j++){
double out = matrix[i*size + j];
std::cout << std::setw(4) << out;
}
//start new line for each row
std::cout << "\n";
}
}
};
所示我看不出有什么不对的,但是当我尝试在一个简单的测试功能使用,我得到的malloc错误。主要功能我已经是
int main(){
double array[] = {0,1,1,2};
int len = sizeof(array)/sizeof(array[0]);
std::cout<<"length of array " << len << std::endl;
toeplitz tp = toeplitz(array, len);
tp.print();
}
它编译和运行的时候我离开了tp.print()线,但是当我加入这行,我得到错误
test_toeplitz(8747,0x7fffdbee63c0) malloc: *** error for object 0x7fb119402788:
incorrect checksum for
freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
我想不通为什么这是。我在这里看过关于这个问题的其他问题,但我无法分辨它们与我所做的事情有何关系。据我所知,它与释放双重内存或试图在释放内存后修改内存有关,但我看不到我的代码在做什么。任何深入了解正在发生的事情将不胜感激。
我要补充,偶尔它实际上运行正常,并且有时它会给出错误“段错误:11”而不是 – bigbadpiano
***对象可能在被释放后被修改。***我会研究那个.. – drescherjm
***我应该添加,偶尔它实际上运行正常,并且有时它会给出错误“段错误:11”而不是***这是一个明确的未定义行为指示。 – drescherjm