- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我运行以下代码时,当我尝试使用 delete[] I[i] 命令时(总是在循环的最后一次运行时),我不断收到 glibc 检测到的错误。在尝试删除 I[i] 的循环之前,我打印出 I 最后一行的值,它完全按照预期显示,所以我认为问题与循环无关太大了。我究竟做错了什么? (我已经包含了 **I 出现的每一行代码)。
编辑 2:错误消息的全部内容是:
*** glibc detected *** getParams: free(): invalid next size (fast): 0x086861f0 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(+0x6b591)[0x271591]
/lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0x272de8]
/lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0x275ecd]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x1cb741]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0x1cb79d]
getParams[0x804ac78]
getParams[0x8048943]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0x21cbd6]
getParams[0x8048731]
======= Memory map: ========
00110000-001f9000 r-xp 00000000 08:01 396979 /usr/lib/libstdc++.so.6.0.13
001f9000-001fa000 ---p 000e9000 08:01 396979 /usr/lib/libstdc++.so.6.0.13
001fa000-001fe000 r--p 000e9000 08:01 396979 /usr/lib/libstdc++.so.6.0.13
001fe000-001ff000 rw-p 000ed000 08:01 396979 /usr/lib/libstdc++.so.6.0.13
001ff000-00206000 rw-p 00000000 00:00 0
00206000-00359000 r-xp 00000000 08:01 11272305 /lib/tls/i686/cmov/libc-2.11.1.so
00359000-0035a000 ---p 00153000 08:01 11272305 /lib/tls/i686/cmov/libc-2.11.1.so
0035a000-0035c000 r--p 00153000 08:01 11272305 /lib/tls/i686/cmov/libc-2.11.1.so
0035c000-0035d000 rw-p 00155000 08:01 11272305 /lib/tls/i686/cmov/libc-2.11.1.so
0035d000-00360000 rw-p 00000000 00:00 0
0074f000-00773000 r-xp 00000000 08:01 11272350 /lib/tls/i686/cmov/libm-2.11.1.so
00773000-00774000 r--p 00023000 08:01 11272350 /lib/tls/i686/cmov/libm-2.11.1.so
00774000-00775000 rw-p 00024000 08:01 11272350 /lib/tls/i686/cmov/libm-2.11.1.so
00a7b000-00a7c000 r-xp 00000000 00:00 0 [vdso]
00d1c000-00d37000 r-xp 00000000 08:01 11276409 /lib/ld-2.11.1.so
00d37000-00d38000 r--p 0001a000 08:01 11276409 /lib/ld-2.11.1.so
00d38000-00d39000 rw-p 0001b000 08:01 11276409 /lib/ld-2.11.1.so
00ec8000-00ee5000 r-xp 00000000 08:01 11272275 /lib/libgcc_s.so.1
00ee5000-00ee6000 r--p 0001c000 08:01 11272275 /lib/libgcc_s.so.1
00ee6000-00ee7000 rw-p 0001d000 08:01 11272275 /lib/libgcc_s.so.1
08048000-0804c000 r-xp 00000000 08:01 4720134 /home/rkappiyo/Dropbox/xingResearch/finalMatlab/getParams
0804c000-0804d000 r--p 00003000 08:01 4720134 /home/rkappiyo/Dropbox/xingResearch/finalMatlab/getParams
0804d000-0804e000 rw-p 00004000 08:01 4720134 /home/rkappiyo/Dropbox/xingResearch/finalMatlab/getParams
08686000-086a7000 rw-p 00000000 00:00 0 [heap]
b7600000-b7621000 rw-p 00000000 00:00 0
b7621000-b7700000 ---p 00000000 00:00 0
b774f000-b7751000 rw-p 00000000 00:00 0
b7762000-b7765000 rw-p 00000000 00:00 0
bfcd4000-bfce9000 rw-p 00000000 00:00 0 [stack]
Aborted
编辑:我已将其更改为包含全部代码。
void invertMatrix(double **mat, int size) {
//index variables used for looping
int i, j, k;
//L and U are the LU decomposition of mat
double **L, **U;
//invMat is the inverted matrix, which will be stored in mat
double **invMat;
//I is the identity matrix
double **I;
L = new double *[size]; //allocation 1
for(i = 0; i < size; i++)
L[i] = new double[size]; //allocation 2
U = new double *[size]; //allocation 3
for(i = 0; i < size; i++)
U[i] = new double[size]; //allocation 4
//compute the LU decomposition of mat and store in L and U
LUDecomp(mat, size, L, U);
invMat = new double *[size]; //allocation 5
for(i = 0; i < size; i++)
invMat[i] = new double [size]; //allocation 6
I = new double *[size]; //allocation 7
for(i = 0; i < size; i++) {
I[i] = new double [size]; //allocation 8
for(j = 0; j < size; j++) {
if(i == j)
I[i][j] = 1;
else
I[i][j] = 0;
}
}
for(i = 0; i < size; i++) {
invMat[i][0] = I[i][0] / L[0][0];
for(j = 1; j < size; j++) {
invMat[i][j] = I[i][j];
for(k = 0; k < j; k++)
invMat[i][j] -= L[j][k] * invMat[i][k];
invMat[i][j] /= L[j][j];
}
}
for(i = 0; i < size; i++) {
mat[i][size - 1] = invMat[i][size - 1] / U[size - 1][size - 1];
for(j = size - 2; j > -1; j--) {
mat[i][j] = invMat[i][j];
for(k = j + 1; k < size; k++)
mat[i][j] -= U[j][k] * mat[i][k];
mat[i][j] /= U[j][j];
}
}
for(i = 0; i < size; i++) {
delete[] L[i]; //free allocation 2
delete[] U[i]; //free allocation 4
delete[] invMat[i]; //free allocation 6
delete[] I[i]; //free allocation 8
}
delete[] L; //free allocation 1
delete[] U; //free allocation 3
delete[] invMat; //free allocation 5
delete[] I; //free allocation 7
}
最佳答案
我真的觉得这种分配二维矩阵的方式很烦人,所以我写了一个简单的 C 程序来分配和初始化一个二维数组,只需调用一次 malloc(),这样你就可以用一个 free 释放内存() 称呼。 (注意,这可以扩展/修改为使用新的 char[...])
/* set up the memory for a 2D matrix with entries of size "size" */
void** matrix2D(long rows, long columns, long size)
{
long i;
unsigned long long row_size = (unsigned long long)columns * (unsigned long long)size;
unsigned long long data_size = ((unsigned long long)rows * (unsigned long long)columns + 1) * (unsigned long long)size;
unsigned long long pointer_size = (unsigned long long)rows * sizeof(void*);
void** result;
if ( (result = (void**)malloc((size_t)(data_size + pointer_size))) == NULL ) {
return NULL;
}
// take the first bit for a vector pointing to the m_pData for each row
char* pdata = (char*)result + pointer_size;
if ((unsigned long)pdata % size) {
pdata += size - (unsigned long)pdata % size;
}
// for each row, set up the pointer to its m_pData
for (i = 0; i < rows; i++) {
result[i] = (void*)pdata;
pdata += row_size;
}
return result;
}
然后您可以使用单行创建每个矩阵,例如:
double** I = (double**)matrix2D(size, size, sizeof(double));
它们可以被释放,例如:
free(I);
简单多了。此外,矩阵数据值是连续的,因此例如,如果您创建一个整数数组并希望将它们全部初始化为零,您可以这样做:
int** array = (int**)matrix2D(height, width, sizeof(int));
memset(array, 0, height * width * sizeof(int));
或者,将其初始化为给定的(非零)值:
for (int i = 0; i < height * width; ++i)
array[i] = value;
关于c++ - 尝试在 C++ 中删除矩阵的一部分时获取 glibc 检测到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4952034/
#include using namespace std; class C{ private: int value; public: C(){ value = 0;
这个问题已经有答案了: What is the difference between char a[] = ?string?; and char *p = ?string?;? (8 个回答) 已关闭
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 7 年前。 此帖子已于 8 个月
除了调试之外,是否有任何针对 c、c++ 或 c# 的测试工具,其工作原理类似于将独立函数复制粘贴到某个文本框,然后在其他文本框中输入参数? 最佳答案 也许您会考虑单元测试。我推荐你谷歌测试和谷歌模拟
我想在第二台显示器中移动一个窗口 (HWND)。问题是我尝试了很多方法,例如将分辨率加倍或输入负值,但它永远无法将窗口放在我的第二台显示器上。 关于如何在 C/C++/c# 中执行此操作的任何线索 最
我正在寻找 C/C++/C## 中不同类型 DES 的现有实现。我的运行平台是Windows XP/Vista/7。 我正在尝试编写一个 C# 程序,它将使用 DES 算法进行加密和解密。我需要一些实
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
有没有办法强制将另一个 窗口置于顶部? 不是应用程序的窗口,而是另一个已经在系统上运行的窗口。 (Windows, C/C++/C#) 最佳答案 SetWindowPos(that_window_ha
假设您可以在 C/C++ 或 Csharp 之间做出选择,并且您打算在 Windows 和 Linux 服务器上运行同一服务器的多个实例,那么构建套接字服务器应用程序的最明智选择是什么? 最佳答案 如
你们能告诉我它们之间的区别吗? 顺便问一下,有什么叫C++库或C库的吗? 最佳答案 C++ 标准库 和 C 标准库 是 C++ 和 C 标准定义的库,提供给 C++ 和 C 程序使用。那是那些词的共同
下面的测试代码,我将输出信息放在注释中。我使用的是 gcc 4.8.5 和 Centos 7.2。 #include #include class C { public:
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我的客户将使用名为 annoucement 的结构/类与客户通信。我想我会用 C++ 编写服务器。会有很多不同的类继承annoucement。我的问题是通过网络将这些类发送给客户端 我想也许我应该使用
我在 C# 中有以下函数: public Matrix ConcatDescriptors(IList> descriptors) { int cols = descriptors[0].Co
我有一个项目要编写一个函数来对某些数据执行某些操作。我可以用 C/C++ 编写代码,但我不想与雇主共享该函数的代码。相反,我只想让他有权在他自己的代码中调用该函数。是否可以?我想到了这两种方法 - 在
我使用的是编写糟糕的第 3 方 (C/C++) Api。我从托管代码(C++/CLI)中使用它。有时会出现“访问冲突错误”。这使整个应用程序崩溃。我知道我无法处理这些错误[如果指针访问非法内存位置等,
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我有一些 C 代码,将使用 P/Invoke 从 C# 调用。我正在尝试为这个 C 函数定义一个 C# 等效项。 SomeData* DoSomething(); struct SomeData {
这个问题已经有答案了: Why are these constructs using pre and post-increment undefined behavior? (14 个回答) 已关闭 6
我是一名优秀的程序员,十分优秀!