我已經創建了一個應該構建對稱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