【发布时间】:2021-09-05 13:45:18
【问题描述】:
我正在尝试将给定的矩阵拆分为 4,但我遇到了一些错误,我不知道为什么。我对这门语言有点陌生。有谁知道我做错了什么?
void split_tl(T **matrice, unsigned int dim){
if(dim == 1){
return;
}
T **tl = new T*[dim/4];
for(unsigned int i = 0; i<dim/4;++i){
tl[i] = new T[dim/4];
}
for(unsigned int i=0; i<dim;++i){
for(unsigned int j=0; j<dim;j++){
if((i<dim/2) && (j<dim/2)){
tl[i][j] = matrice[i][j];
} else{
std::cout << "no ";
}
}
std::cout << std::endl;
}
}
在这个函数中,我试图获取矩阵的左上角。
int **matrice = new int*[2];
for(unsigned int i = 0; i<2;++i){
matrice[i] = new int[2];
}
for(unsigned int i = 0; i<2;++i){
for(unsigned int j = 0; j<2;++j){
matrice[i][j] = i+j;
}
}
这是我要发送的矩阵。它是一个 2x2 矩阵,仅用于测试目的。
这些是 Valgrind 的错误:
==133== Invalid read of size 8
==133== Invalid write of size 4
==133== Process terminating with default action of signal 11 (SIGSEGV)
==133== Access not within mapped region at address 0x0
【问题讨论】:
-
new T[dim/4]; 的意义何在? (为什么是/4?) -
我忘了对不起,暗淡是矩阵的一面。我除以 4 因为我将它分成 4 个子矩阵