为啥我的防病毒软件阻止我的代码执行...?

Posted

技术标签:

【中文标题】为啥我的防病毒软件阻止我的代码执行...?【英文标题】:why my antivirus is blocking my code to executer...?为什么我的防病毒软件阻止我的代码执行...? 【发布时间】:2021-01-30 20:04:29 【问题描述】:

我在Visual Studio代码上写了代码:-

//add data at the begining...
#include <stdio.h>
#include <stdlib.h>

typedef struct node Node;
struct node
    int data;
    Node *next;  
;

Node *create_node(int item, Node *next)

    Node *new_node = (Node *)malloc(sizeof(Node));

    if(new_node == NULL)
    
        printf("Error, could not create new node...!");
        exit(1);
    

    new_node->data = item;
    new_node->next = NULL;

    return new_node;


Node *prepend(Node *head, int item)

    Node *new_node;
    
    new_node = create_node(item, head);

    return new_node;


int main()

    Node *n1, *n2, *head, *n3;

    n1 = create_node(10, NULL);

    head = n1;

    head = prepend(head, 20);

    n2 =  head;
    printf("First data = %d", n2->data);
    
    n3 = n2->next;
    printf("Second data = %d", n3->data);

    return 0;

当我运行它时,结果是:-

PS D:\Codes\C 编程\数据结构\链表> cd "d:\Codes\C 编程\数据结构\链表" ; if ($?) gcc linked_list02.c -o linked_list02 ; if ($?) .\linked_list02

... gcc linked_list02.c -o linked_list02 ; if ($?) .\linked_list02
                                                    ~~~~~~~~~~~~~~~.

在 line:1 char:115

                                                    ~~~~~~~~~~~~~~~
CategoryInfo : ResourceUnavailable: (:) [], ApplicationFailedException FullyQualifiedErrorId : NativeCommandFailed

当我再次尝试运行时,结果是:-

PS D:\Codes\C 编程\数据结构\链表> cd "d:\Codes\C 编程\数据结构\链表" ; if ($?) gcc linked_list02.c -o linked_list02 ;如果 ($?) .\linked_list02 c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe:无法打开输出文件linked_list02.exe:权限被拒绝 collect2.exe:错误:ld 返回 1 个退出状态

为什么会发生这种情况,我该如何解决...?

【问题讨论】:

在 create_node 你永远不会使用下一个参数。看起来像一个错误,new_node->next = NULL 应该是 new_node->next = next。如果这可以解决您的问题,请记下。目前你不仅内存泄漏,还有空指针异常。 它没有用,伙计:(你能解释一下吗...? 【参考方案1】:

我确认修改您的 create_node 函数可以解决问题。

//add data at the begining...
#include <stdio.h>
#include <stdlib.h>

typedef struct node Node;
struct node 
  int data;
  Node* next;
;

Node* create_node(int item, Node* next)

  Node* new_node = (Node*)malloc(sizeof(Node));

  if (new_node == NULL)
  
    printf("Error, could not create new node...!");
    exit(1);
  

  new_node->data = item;
  new_node->next = next; // <- corrected the problem here

  return new_node;


Node* prepend(Node* head, int item)

  Node* new_node;

  new_node = create_node(item, head);

  return new_node;


int main()

  Node* n1, * n2, * head, * n3;

  n1 = create_node(10, NULL);

  head = n1;

  head = prepend(head, 20);

  n2 = head;
  printf("First data = %d", n2->data);

  n3 = n2->next;
  printf("Second data = %d", n3->data);

  return 0;

使用 VSC 编译器以 release 模式编译。

解释在您的原始代码中,您从不使用next 参数,因此,当调用create_node 时,next 始终指向NULL

这使得prepend 函数实际上忽略了head 参数。这直接导致了这里的问题:

head = prepend(head, 20);
// oops, head->next is NULL!

n2 = head;
printf("First data = %d", n2->data);

n3 = n2->next;
// n3 is NULL then

printf("Second data = %d", n3->data);
// null pointer, you can't access the data memory on a NULL pointer!

【讨论】:

太好了,你可以接受这个答案,这样有类似问题的任何人都会认为这是正确的。【参考方案2】:

这不是您的代码的问题,但默认情况下,大多数预安装的杀毒软件会阻止任何带有 .exe 扩展名的文件,即使它是一个简单的“hello world”程序,也会将其视为系统安全漏洞。如果您当前的代码存在内存问题,则运行时您在执行代码时会吐出错误

您可以在编码或即将运行程序时在控制面板中禁用杀毒软件

或卸载它,因为 Windows Defender 比这些软件做得更好

【讨论】:

其实我不用卸载杀毒软件。我不得不调整我的防病毒软件中的一些设置,并且它起作用了。非常感谢您的回复。

以上是关于为啥我的防病毒软件阻止我的代码执行...?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的防病毒软件认为我的 C++ 程序是病毒,我该如何修复它?

请求防病毒或操作系统的权限以执行

Windows:防止防病毒软件阻止桌面程序安装或运行

防病毒软件阻止的服务器端事件

“mono.exe”是啥奇怪的文件,为啥会突然出现在我的电脑上?

防病毒软件正在阻止 nodemailer - 错误:证书链中的自签名证书