社区
C++ 语言
帖子详情
非法地址
kevinbest0702
2009-04-23 12:10:36
今天在做一道C题目时,出现了非法地址访问的问题。
想请教内存中那段地址是系统保留的,非法的?谢谢!
...全文
351
15
打赏
收藏
非法地址
今天在做一道C题目时,出现了非法地址访问的问题。 想请教内存中那段地址是系统保留的,非法的?谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhanghuayi_xiyou
2009-04-23
打赏
举报
回复
[Quote=引用 7 楼 kevinbest0702 的回复:]
好
请大家看下面的代码:
struct S
{
int i;
int * p;
};
void main()
{
struct S s;
int * p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
}
程序运行到最后一句时会崩溃。
原因是s.p指向的变量的地址为3,无法访问。
这个应该是非法地址的问题吧?
[/Quote]
p[1] = 3; 和
s.p[1] = 1; 都应该是非法访问地址。
kevinbest0702
2009-04-23
打赏
举报
回复
这是一道笔试题。
至于我的目的,请仔细看我的提问。谢谢!
kevinbest0702
2009-04-23
打赏
举报
回复
所以我才想问这个非法地址空间的取值范围是多少啊?
子晞
2009-04-23
打赏
举报
回复
程序没有权限无法访问的地址为非法地址,现在的操作系统都会给进程一个虚拟地址空间,然后将该虚拟地址空间映射
到真正的物理空间.如果一个程序试图访问一块没有映射的内存将是是不允许的。
可以试图访问一个非法地址的程序如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int someInt = 3;
int *somePoint;
int *anotherPoint;
somePoint = &someInt;
printf("%d\n", *somePoint);
printf("%d\n", *anotherPoint); /*非法地址 */
return 0;
}
anotherPoint没有被初始化,那么它的地址是不定的,该指针引用一个未知的地址。那么程序可能会崩溃或出错。
Proteas
2009-04-23
打赏
举报
回复
可能是你数组越界了。或者 出现野指针。
要看代码。
Cpp权哥
2009-04-23
打赏
举报
回复
小地址是系统保留的,至少NULL是。
还有一些空间是只读的,比如保存字符串常量的地方。
黑格东东斯基
2009-04-23
打赏
举报
回复
s.p本来就只是表示一个指针地址,使用[0][1]数组肯定会指向错误。
s.p=p; //s.p的值为s结构的开始地址
s.p[1] = 1; // 将s.p的值指向地址为0x1的地址
s.p[0] = 2; // 企图给0x1地址空间赋值,肯定死翘翘
cyldf
2009-04-23
打赏
举报
回复
楼主写这段程序是想实现什么功能?
kevinbest0702
2009-04-23
打赏
举报
回复
这个你就错了!
s.p=p;
这一句代码的意思是指p指针和s.p指针指向的都是同一个内存地址,也就是s.i变量的地址
coldant
2009-04-23
打赏
举报
回复
s.p[1] = 1;
s.p[0] = 2;
没有对p分配空间,当然不能访问,最好在初始化时将指针赋值,或者=null
cyldf
2009-04-23
打赏
举报
回复
[Quote=引用 7 楼 kevinbest0702 的回复:]
好
请大家看下面的代码:
struct S
{
int i;
int * p;
};
void main()
{
struct S s;
int * p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
}
程序运行到最后一句时会崩溃。
原因是s.p指向的变量的地址为3,无法访问。
这个应该是非法地址的问题吧?
[/Quote]
你这个程序真有意思,首先p指向一个整型,后面就变成数组了。
你的struct S中p没有分配空间,对其赋值本来就是不对的。
kevinbest0702
2009-04-23
打赏
举报
回复
好
请大家看下面的代码:
struct S
{
int i;
int * p;
};
void main()
{
struct S s;
int * p = &s.i;
p[0] = 4;
p[1] = 3;
s.p = p;
s.p[1] = 1;
s.p[0] = 2;
}
程序运行到最后一句时会崩溃。
原因是s.p指向的变量的地址为3,无法访问。
这个应该是非法地址的问题吧?
sagegz
2009-04-23
打赏
举报
回复
把部分代码贴出来瞅瞅.
很有可能是内存越界,因为一般内存地址都是由操作系统进行分配的.
除非你对指定的内存区域直接进行写入.
pathuang68
2009-04-23
打赏
举报
回复
一般是内存越界,也有可能是访问了那一点保留地址。
猫已经找不回了
2009-04-23
打赏
举报
回复
更可能是你内存越界,而不是访问了那一点保留地址。
【调试工具】addr2line 定位内核
非法
地址
addrline 工具并不能直接帮助解决问题,但是对于去排查出问题点还是很有帮助的。关于上面奇怪的
地址
:dead0000000000f0 在内核中出现,大概率与链表有关。具有原因是:链表第一个节点被删除了,里面next和prev都复制dead了。然而代码仍访问此被删除节点,于是
非法
地址
了。
Java异常处理 自定义两个异常类
非法
姓名异常IllegaNameException和
非法
地址
异常IllegalAddressException
初次尝试Java自定义异常的定义、拋出和捕获试验 问题描述: (1)自定义两个异常类
非法
姓名异常IllegaNameException和
非法
地址
异常IllegalAddressException。 (2)定义Student类包含Name和Address属性,和setName、setAddress方法,当姓名长度小于1或者 大于5抛出IllegaNameExceptio,当
地址
中不含有”省”或者“...
自定义两个异常类
非法
姓名异常IllegaNameException和
非法
地址
异常IllegalAddressException。
class IllegaNameException extends Exception//
非法
姓名异常 { public IllegaNameException(String message) { super(message); } public IllegaNameException() { super(); } } class I...
valgrind调试c/c++内存问题:
非法
地址
访问_内存泄漏_越界访问
valgrind调试内存
非法
地址
访问, 内存泄漏, 越界访问
局域网IP
地址
非法
使用问题的解决方法
在大多数局域网的运行管理工作中,网络管理员负责管理用户IP
地址
的分配,用户通过正确地注册后才被认为是合法用户。在局域网上任何用户使用未经授权的IP
地址
都应视为IP
非法
使用。但在Windows操作系统中,终端用户可以自由修改IP
地址
的设置,从而产生了IP
地址
非法
使用的问题。改动后的IP
地址
在局域网中运行时可能出现的情况如下。?? a.
非法
的IP
地址
即IP
地址
不在...
C++ 语言
65,182
社区成员
250,527
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章