吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1053|回复: 12
收起左侧

[求助] 关于c语言内存问题 ,大佬帮忙看看

[复制链接]
雨落惊鸿, 发表于 2022-12-26 21:26
本帖最后由 雨落惊鸿, 于 2022-12-26 21:29 编辑

i的地址为什么和溢出后arr[15]的地址相同

int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
int i = 0;
for (i = 0; i <= 15; i++)
{
printf("hehe\n");
arr[i] = 0;
}
return 0;
}



如图i后定义应该在低地址处,arr[15]在高地址处 它们的地址为什么会相同?
a0e63318571b4d24324ec03ecc09d10.png
168cc0746f8d96908197a1435f9104f.png

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

苏紫方璇 发表于 2022-12-26 23:40
转到反汇编看一下就清楚了,i是在高位地址的
DEATHTOUCH 发表于 2022-12-27 02:00
可能是因为编译器整体扫描了所有变量,然后按从低到高的顺序安排这些变量

顺便,开了优化的话编译器直接把arr[i] = 0;优化没了,但是报了个警告说是这个代码会造成ub。
kof888 发表于 2022-12-27 02:34
 楼主| 雨落惊鸿, 发表于 2022-12-27 08:29
本帖最后由 雨落惊鸿, 于 2022-12-27 08:34 编辑
苏紫方璇 发表于 2022-12-26 23:40
转到反汇编看一下就清楚了,i是在高位地址的

大佬我有点不明白,按照规则 先定义的存在高地址处后定义在低地址处,为什么i是在高地址处?

点评

具体原理我也不太清楚,可能和编译器有关吧。  详情 回复 发表于 2022-12-27 09:24
Curiosity-Boy 发表于 2022-12-27 09:23
你这个数组越界了吧
苏紫方璇 发表于 2022-12-27 09:24
雨落惊鸿, 发表于 2022-12-27 08:29
大佬我有点不明白,按照规则 先定义的存在高地址处后定义在低地址处,为什么i是在高地址处?

具体原理我也不太清楚,可能和编译器有关吧。
gunxsword 发表于 2022-12-27 10:04
没看懂,你那放的内存图是啥意思?地址,000000000044?内存地址能是这样的吗?里面全是问号...也没有数据啊
没看懂,可能我太菜了吧,不好意思!!!!
fulcrumtech 发表于 2022-12-27 11:08
本地变量的分配地址是由编译器的编译策略决定的,看图片,楼主使用的应该是VS,VS的C/C++编译器版本经典就有600、1000、1400等,而且每个版本编译策略还分debug、release模式,还有x86、x64平台之分,这些都会影响变量的分配地址。你这个程序带有一定的偶然性,而实际上这些地址之间没什么联系,只是因为简单,所以出现了一些幻象。尤其是vs的debug模式,为配合vs的条件断点、变量追踪等调试功能而预留了一部分内存,具体方法是微软的机密,没有公开资料具体描述如何分配变量地址。我改进了一下你的代码:
[C] 纯文本查看 复制代码
		int ints1[11], ints2[11];
		int i;
		char j;
		long k;
		short l;
		double m;
		float n;
		char chars1[11], chars2[11];
		printf("int:%p\n", &i);
		printf("char:%p\n", &j);
		printf("long:%p\n", &k);
		printf("short:%p\n", &l);
		printf("double:%p\n", &m);
		printf("float:%p\n", &n);
		for (i = 0; i < 22; i++)
		{
			printf("%04d:%p,%p,%p,%p\n", i, &ints1[i], &ints2[i], &chars1[i], &chars2[i]);
		}

x86debug:
x86debug.png
x64debug:
x64debug.PNG
x86release:
x86release.PNG
x64release:
x64release.PNG

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
雨落惊鸿, + 1 + 1 我很赞同!
苏紫方璇 + 1 + 1 用心讨论,共获提升!

查看全部评分

lbj2gbt 发表于 2022-12-27 11:19
数组下标越界
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 21:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表