- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
所以我有一个小程序
#include <iostream>
using namespace std;
void lol() {
cout << "How did we get here?"<<std::endl;
}
int main()
{
long a, b, z[10];
cin >> a >> b;
z[a] = b;
}
您可以通过在线编译器运行它here
该程序没有任何目的,但它有一个错误或功能 - 我不知道它是什么。所以,如果你写这样的东西main 13 2015
你可能什么也得不到,但如果你输入两个魔数(Magic Number) 13
和 4196608
你会得到一个错误。此外,该程序执行函数 void lol()
并打印行 How did we get here?
。
我运行了 nm ./main
并找到了我的函数 void lol()
,地址 0000000000400900
等于 4196608
(计数系统的基数是 10)。
这意味着程序出于某种原因“跳转”到该地址并执行函数void lol()
。此外,如果我更改第一个数字,则不会发生任何事情。main 10 4196608
, main 11 4196608
, main 12 4196608
, main 14 4196608
, main 15 4196608
- 都一样,没有错误,但是只要我输入数字 13
,我就会得到这个有趣的行为。
谁能解释一下这是怎么回事?
最佳答案
如果 a
的输入是大于 9(或负数)的数字,则您正在错误地访问 z[a]
(越界索引,buffer overflow)因为你声明了一个数组 long z[10]
这是典型的 undefined behavior (UB)。
UB 非常糟糕,参见this answer我的,或更多背景:
解释某些实际未定义行为的唯一方法是深入研究所有具体实现细节(编译器、优化、操作系统、机器代码、处理器等......)。你可以花很多年在这上面。 (也许在您的情况下,call stack 上的返回地址已被 lol
函数的地址覆盖)。
关于c++ - 有趣的程序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28299760/
文档:https://www.xfyun.cn/doc/spark/PPTGeneration.html 价格方面提供了免费1000点的额度,生成一次是10点,正好10
我有一个工具按钮和一个分配给它的操作。但该操作没有点击事件,也没有点击代码。因此该按钮被禁用,如何将其更改为启用? 谢谢! 最佳答案 当某个操作没有 OnExecute 处理程序时,该操作始终处于禁用
我有一个 C 程序,它初始化两个结构并尝试打印它们的值。请参阅下面的代码。 #include #include typedef struct node{ int data; struc
我在回答 this question当我想到这个例子时: #include void func(int i); void func(); int main (){ func(); r
这些bug可能够你喝一壶的。 1、被断言(assert)包含的代码 常发生在切换到release版本时,执行结果乖乖的,最终查找结果是assert括号里的代码在release下是不执行的。
我正在谈论一个独立的对象,稍后我想使用 saveOrUpdate() 进行更新。 我们如何同时设置 null 和clear()引用的集合? A[1:1]B[1:M]C B 到 C 的引用可以为空,这意
我最近完成了 Marjin Haverbeke 的书“Eloquent Javascript, Second Edition”中的一项挑战。 One had to create此控制台输出使用 for
我写了一个 HtmlHelper 表达式,我花了很多时间将标题标签放入我的下拉列表中,如下所示: public static HtmlString SelectFor( thi
你知道有哪些开放的软件项目有特别有趣/写得很好的单元测试吗? 编写单元测试对我来说通常感觉很奇怪,因为它似乎太随机、太密集、太稀疏,……阅读一些现实世界的例子(而不是书籍、图书馆示例代码等)会很棒。
我有一个我目前正在使用的 Silverlight 应用程序,它为其 MVVM 框架实现了 Caliburn.Micro。一切正常,但我注意到一些绑定(bind)中的一些有趣之处。我拥有的是处理应用程序
我通过 swscale 运行 png 图像数据以获取 YUV420P 数据,然后使用 MSMPEG4V1 编解码器对该帧进行编码,从而在 iPhone 上对一些视频进行编码。在 api 文档中,avc
我写了一个页面,发现 addEventListener("loadedmetadata",fun) 在 firefox 上运行不正确 我正在尝试修复一个旧软件的错误。在加载视频和页面时,该软件尝试在页
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!