为啥我的防病毒软件阻止我的代码执行...?
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++ 程序是病毒,我该如何修复它?