gpt4 book ai didi

c++ - 运行时检查失败 #2 - 变量 '' 周围的堆栈已损坏

转载 作者:行者123 更新时间:2023-11-30 04:13:55 37 4
gpt4 key购买 nike

我已经开始尝试使用 dll 并遇到了这个问题。我有 2 个解决方案(VS 2012)1.我在哪里生成dll(包含:templatedll.h,templatedll.cpp,templatedllshort.h)2. 我在哪里测试它(因此我使用 templatedllshort.h)

所以这是我的第一个(dll)解决方案的代码

templatedll.h

class __declspec(dllexport) Echo
{
private:
int output;
void echo_private();

public:
Echo();
Echo(int output_);
~Echo();
void echo_public();
};

模板化.cpp

#include "templatedll.h"
#include <iostream>

Echo::Echo()
{
output = 0;
std::cout << "Echo()\n";
}

Echo::Echo(int output_)
{
this->output = output_;
std::cout << "Echo(int)\n";
}

Echo::~Echo()
{
std::cout << "~Echo()\n";
}

void Echo::echo_private()
{
std::cout << "this is output: " << this->output << std::endl;
}

void Echo::echo_public()
{
echo_private();
}

templatedllshort.h(这是一个短标题,隐藏了我类(class)的所有私有(private)部分)

class __declspec(dllimport) Echo
{
public:
Echo();
Echo(int output_);
~Echo();
void echo_public();
};

我测试的第二个解决方案

#include "templatedllshort.h"

int main()
{
Echo e(1);
e.echo_public();
return 0;
}

一切都已正确链接,并且两个解决方案都可以编译和运行。 Run-Time Check Failure 出现在 return 0 之后;陈述。这是预期的输出:

Echo(int)
this is output: 1
~Echo()

谁能看出问题出在哪里?谢谢

最佳答案

(this is a short header that hides all the private parts of my class)

那是致命的。 DLL 的客户端代码会将错误大小 传递给分配器以创建对象。并创建一个太小的对象。在这种特殊情况下,它不会为对象保留足够的堆栈空间。 DLL 本身现在将乱写到未分配的内存。/RTC 警告旨在让您远离此类麻烦。

不要在类(class)上撒谎。

使用接口(interface)和工厂函数来隐藏实现细节。

关于c++ - 运行时检查失败 #2 - 变量 '' 周围的堆栈已损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19162344/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com