链接到专用模板时堆栈已损坏
stack corrupted when linking to specialized templates
我只是做了一些非常奇怪的行为,想知道发生了什么。
我写了一个C++库,其中包含一个类MemoryBlock:
所以我有两个头文件,一个用于"概念",另一个用于部分专门化。
内存块.h:
template <int Platform, typename T>
class MemoryBlock {
public:
MemoryBlock(unsigned size);
~MemoryBlock();
};
和部分专业化(我想对呼叫者隐藏)
内存块0.h:
template <typename T>
class MemoryBlock<0, T> {
private:
T* _data;
unsigned _size;
public:
MemoryBlock(unsigned size): _size(size) {
_data = (T*) malloc(size*sizeof(T));
}
~MemoryBlock() {
free(_data);
}
};
在cpp文件中,一个实例化浮点和双的模板
Instacction.cpp
template MemoryBlock<0, double>;
template MemoryBlock<0, float>;
在一个单独的项目中,我链接到上面代码生成的(静态)lib,并包括概念头
Main.cpp
#include <MemoryBlock.h>
int main(int argc, char** argv) {
MemoryBlock<0, float> a(100);
}
这可以很好地编译和链接。然而,在运行时,我得到了一个错误:变量"a"周围的堆栈已损坏
搜索了一段时间后,我决定在"concept"文件中添加两个字段:
template <int Platform, typename T>
class MemoryBlock {
private:
T* _data; // must match the specialization apparently
unsigned _size; // must match the specialization apparently
public:
MemoryBlock(unsigned size);
~MemoryBlock();
};
现在错误已经修复。
客户端项目(引用lib的项目)似乎不知道部分专用化的内部内存表示,并且信任概念头,即使所有符号都已静态链接。
相关文章:
- gdb错误:Backtrace已停止:上一帧与此帧相同(堆栈已损坏?)
- 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 变量"A"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"e"周围的堆栈已损坏。发生
- 运行时检查失败 #2 - 变量周围的堆栈'...'已损坏
- 运行时检查失败 #2 - 变量"l1"周围的堆栈已损坏
- 数组变量周围的堆栈已损坏
- 运行时检查失败 - 变量周围的堆栈已损坏
- 调试:运行时检查失败 #2 - 变量"LoggerThread"周围的堆栈已损坏
- 运行时检查失败 #2 - 变量"数字选择"周围的堆栈已损坏
- 运行时间检查:变量周围的堆栈已损坏
- 变量"name"周围的堆栈已损坏C++
- MS 工作室 17 变量周围的堆栈已损坏
- 错误:运行时检查失败 #2 - 变量周围的堆栈已损坏
- C++指针:数组的堆栈已损坏
- 变量周围的堆栈已损坏
- C++ 变量周围的堆栈已损坏
- 运行时检查失败 #2 - 变量周围的堆栈---已损坏
- VS2010和OpenCV:变量周围的堆栈已损坏
- 指针函数参数已损坏,堆栈已损坏