有关程序运行跳出ACCESS VIOLATION的问题

wqw1121 2014-11-09 08:22:30
小弟初学C++ Builder,想编一个程序能够实现将C盘除SYSTEM以及Users以外的权限全部删除。
功能已经实现,但程序运行时总会弹出access violation at address xxxxxxxxx错误。
我已经查了很多资料,可能是非法访问内存的问题,但怎么修改程序都无济于事。
尝试过单步调试,错误指向NotifyNonDelphiException 的倒数第二行。
小弟对指针的概念比较模糊,可能程序很乱,求各位高手指出错误,拜谢!

代码如下:


FILE* usersfile;
char *pos1;
char *pos2;
char buffer[128];
char cmdchar[128];
pos1 = (char *)malloc(100*sizeof(char));
ShellExecute(0, "open" , "cmd" , "/c cacls c:\\\\>users.txt" , 0, SW_HIDE);
Sleep(2000);
usersfile=fopen("users.txt","r");
while(fgets(pos1,100,usersfile)!=NULL)
{
pos2 = strstr(pos1,"SYSTEM");
if(pos2 !=NULL)
{
continue;
}
pos1 = pos1 + 4;
pos2 = strstr(pos1,":");
if(pos2 != NULL)
{
memcpy(buffer, pos1,pos2-pos1);
buffer[pos2-pos1]='\0';
sprintf(cmdchar, "/c cacls c:\\\\ /c /e /r \"%s\" & pause", buffer);
if(strcmp(buffer,"BUILTIN\\Users")==0||strcmp(buffer,"Users")==0)
{
pos1 = pos1 - 4;
continue;
}
ShellExecute(0, "open" , "cmd" , cmdchar , 0, SW_SHOWNORMAL);

}
pos1 = pos1 - 4;

}
fclose(usersfile);
free(pos1);
pos1=NULL;
free(pos2);
pos2=NULL;
ShellExecute(0, "open" , "cmd" , "/c del users.txt " , 0, SW_HIDE);
...全文
276 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2014-11-10
  • 打赏
  • 举报
回复
free(pos1); pos1=NULL; free(pos2); pos1 pos2指向的是同一块内存,不能释放2次 而且,pos1的值,在得到malloc返回值之后,已经修改多次,不能传给free了,你应该把malloc的返回值记录下来,用另一个变量来做循环
wqw1121 2014-11-10
  • 打赏
  • 举报
回复
引用 1 楼 xpdavis 的回复:
free(pos1); pos1=NULL; free(pos2); pos1 pos2指向的是同一块内存,不能释放2次 而且,pos1的值,在得到malloc返回值之后,已经修改多次,不能传给free了,你应该把malloc的返回值记录下来,用另一个变量来做循环
感谢大神,问题已经顺利解决!拜谢拜谢,如以后有问题还请多多帮忙啊!

13,824

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧