"Access Violation"是什么问题?

SailorK 2005-03-31 11:29:51
#include<iostream>
#include<string.h>
using namespace std;

struct object
{
char *name;
};

main()
{
object* ptr=new object;
strcpy(ptr->name,"Name");
delete [] ptr->name;
delete ptr;
system("pause");
}
...全文
73901 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SailorK 2005-04-01
  • 打赏
  • 举报
回复
thanks everyone
dongpy 2005-03-31
  • 打赏
  • 举报
回复
strcpy(ptr->name,"Name");
//ptr->name需要指向可修改的内存,所以要分配空间。

如果不分配,可以让它指向常量数据区:
main()
{
object* ptr=new object;
ptr->name = "Name";
delete ptr;
system("pause");
}

ycom__net 2005-03-31
  • 打赏
  • 举报
回复
当你运行程式得到了一个AV(Access Violation)错误的时候,这意味着你的程式正在试图访问一块

不再有效的内存,请注意我所提到的“不再”有效。大多数的情况下,出现这个错误要么是因为你试图访问一块已经被释放的内存,要么是想使用一个还未创建对象的指针
http://www.51one.net/info/2436856514992574.html 看一下
bulala 2005-03-31
  • 打赏
  • 举报
回复
是啊,没有分配空间。怎么访问?
Vairocana 2005-03-31
  • 打赏
  • 举报
回复
object* ptr = new object;
这里new语句只分配了一个4字节的name字符串指针,即:只定义了一个ptr->name指针变量,但是并未为该指针分配实际所需的内存。就好象定义:
char *p; // 定义了p
strcpy(p, "Name"); // 未分配内存会报错,所以下面的delete [] ptr->name;是无意义的。

解决办法:
object* ptr = new object;
ptr->name = new char[5]; // 加上这一句
strcpy(ptr->name, "Name");
kobefly 2005-03-31
  • 打赏
  • 举报
回复
#include<iostream>
#include<string.h>
using namespace std;

struct object
{
char *name;
};

main()
{
object* ptr=new object;
ptr->name = new char[20];//你这个指针没有分配内存啊,
strcpy(ptr->name,"Name");
delete [] ptr->name;
delete ptr;
system("pause");
}
xjp6688 2005-03-31
  • 打赏
  • 举报
回复
大家都说了
goodluckyxl 2005-03-31
  • 打赏
  • 举报
回复
Access Violation
是越界访问或者无效地址

pcboyxhy 2005-03-31
  • 打赏
  • 举报
回复
构造函数里面最好初始化一下
喜购函数再销毁一下
踏岸寻柳 2005-03-31
  • 打赏
  • 举报
回复
AV多是访问无效内存空间所致。
你的问题比较明显,char *变量尚未开辟空间,就准备赋值,当然出错。

64,690

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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