4

读完这篇文章后你可能会说我疯了,但当你读到我在这里说的话时,我真的希望你相信我。为了了解可能导致内存泄漏或其他错误的情况,我编写了以下代码并尝试在我的电脑上编译,

#include <iostream>

using namespace std;

class game
{
   int x;

   public : 
   char *s;
   char read();
   char manipulation();
};

char game :: read()
{
   char string[100];
   cout<<"Enter name ";
   cin>>string;
   s = string;
   cout<<"Name is "<<&s<<endl;
}

int main()
{ 
   game games,games1;
  // games.read();
   cout<<"Name is "<<games.s<<endl;
   return 0;
}

如果我在 main 中执行 games.read(),我的防病毒软件 BITDEFENDER 会显示以下错误,“BITDEFENDER 在 c:/c++/inline.exe 中检测到受感染的项目。病毒名称:Gen:Variant.Graftor。 51542. 为保护您,该文件已被消毒”

inline.cpp 是我的程序的名称。如果我删除该行“games.read()”,它编译得很好。指针是否在某处导致内存泄漏?

4

2 回答 2

13

您的防病毒程序刚刚发现了一个释放后使用漏洞。

string是一个本地数组。退出
后无法使用。read()

于 2013-01-14T23:22:20.603 回答
2

如果您的系统声称您的代码是病毒,那么从某种意义上说,您正在失去理智,这没什么好担心的。你不是。

病毒扫描程序将寻找与病毒一致的行为模式并报告它们。它们并不完美,非病毒行为有时看起来像病毒。

例如,一个经典的病毒策略是使用无效指针写入来运行任意代码。最早的病毒之一使用了这个,它仍然是一种常见的策略(我记得不久前的一个 IE 更新来解决这个问题)。因此,如果您有一个指针错误(如上一张海报所述),那么它可能看起来像病毒。

于 2013-01-14T23:24:05.383 回答