C++ STL map::operator[] 在被删除的条目上完成

2023-12-28

std::map<int,int> bar;

int foo(int key)
{
  bar.erase(key);
  return 1;
}    

int main()
{
  bar[0] = foo(0);
  return 0;
}

此代码使用 GCC 4.8 编译,在使用电围栏检查内存使用情况时出现段错误。

LD_PRELOAD=libefence.so.0.0 ./a.out

问题来自于编译器生成的代码开始在映射中分配新条目,然后执行foo()获取要投入的值bar[0]。在跑步的时候foo(),该条目被销毁,代码最终通过写入未分配的内存而结束。

操作的排序方式是否取决于编译器实现,还是由 C++ 当前标准指定?


标准 (§1.9 15) 指定对二元运算符的两个操作数的求值是无序的(除非在某些特定情况下):

除非另有说明,否则各个运算符的操作数的评估 和 各个表达式的子表达式是无序的。

这意味着它不要求赋值操作的一侧先于另一侧求值,事实上,依赖于这些无序操作的顺序是未定义的行为。

对于函数参数的求值顺序来说,这通常也是正确的。

您需要将作业分成两部分:

int result = foo(0);
bar[0] = result;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ STL map::operator[] 在被删除的条目上完成 的相关文章

  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 中最小化字符串长度

    我想减少字符串的长度 喜欢 这串 string foo Lorem ipsum dolor sit amet consectetur adipiscing elit Aenean in vehicula nulla Phasellus li
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template

随机推荐

  • Thin + Nginx + Websockets 配置 |导轨

    我有一个带有 websocket rails gem 的 Ruby on Rails 3 2 应用程序 在 nginx 反向代理后面的瘦网络服务器中运行 除了 nginx 反向代理外 一切正常 通过删除 nginx 反向代理 websock
  • 在使用 Xamarin 完成方法之前 UI 不会更新

    我正在开始我的移动开发冒险 并且已经遇到了一个问题 我知道在 WPF 中我会使用BackgroundWorker更新 UI 但它如何使用 Xamarin 与 Android 配合使用 我找到了很多建议 但没有一个对我有用 下面的代码在执行其
  • 导入底图时出现导入错误

    我在导入底图时遇到问题 即使我刚刚通过安装pip install basemap 我已经尝试过 python2 7 和 python3 python3 gt gt gt from mpl toolkits basemap import Ba
  • 将div放在导航栏下方并且不要与内容重叠

    我的问题是我在网页顶部修复了一个导航栏 它包括两侧边距和顶部边距 在这个导航栏下面 我想设置一个可滚动的容器 假设我正在使用 Bootstrap 3 2 0 来布局网站 问题是 由于导航栏的边距 我想要放在下面的内容与导航栏重叠 并且显示在
  • Jmeter,如何增加堆大小

    我读过您需要更改 jmeter bat 文件中的堆大小 我使用的是 Windows 以增加内存 以便能够测试大约 500 个线程或更多 这是默认值 if not defined HEAP rem See the unix startup f
  • 如何在android中交换具有不同布局的片段?

    我正在开发一个使用片段的 Android 应用程序 它更像是主 详细信息形式 我希望主要活动由左侧的列表片段组成 根据左侧选择的项目 我想在右侧显示具有不同布局的片段 注意 右侧的每个片段需要不同的布局 视图 我遇到的所有示例都仅使用右侧的
  • org.openqa.selenium.WebDriverException:未知错误:Chrome 无法启动:崩溃。 (未知错误:DevToolsActivePort 文件不存在)

    Javascript selenium 框架 不在 Chrome 上运行 我已经尝试了所有可能的方法 取消选中以管理员身份运行 Code public void setUp throws InterruptedException IOExc
  • Microsoft VisualStudio TestTools UITest dll

    我需要找到 Microsoft VisualStudio TestTools UITest Common dll Microsoft VisualStudio TestTools UITest Extension dll Microsoft
  • iOS 8.3 更新后 NSMutableURLRequest 正文格式错误

    在今天的 iOS 8 3 更新之前 我的代码工作正常 但更新后服务器开始拒绝请求 因为它找不到 JSON 数据 我发现 iOS 发送了错误的 application x www form urlencoded 文本 未正确编码 因为它看起来
  • Symfony 2中如何获取请求参数?

    我对 symfony 很陌生 在其他语言中 例如 java 和其他语言 我可以使用request getParameter parmeter name 来获取该值 我们可以用 symfony2 做一些类似的事情吗 我看过一些例子 但没有一个
  • 在 attoparsec 中实现skipWhile1

    阿托秒差距 https hackage haskell org package attoparsec提供功能takeWhile1至少消耗一个字符 然而 没有类似的skipWhile 我该如何实现这个功能skipWhile1 Note 这个问
  • 如何永久显示标记标签?

    在jVectorMap中 我试图找到一种解决方案来永久显示标记标签 但我无法做到 我在文档中也没有找到任何有关它的信息 我只想最初显示的标记标签 有什么建议么 没有一种快速或简单的方法 jVectorMap 显示标签的方式是使用 div 和
  • 如何使用“RotateDrawable”?

    谁能告诉我他们是怎么得到的RotateDrawable是否可以通过代码或 XML 或两者来工作 关于动画绘制的文档非常差 动画似乎只适用于图像 我希望能够为所有可绘制对象制作动画 当我试图得到一个RotateDrawble来自 XML 只会
  • Groovy 和 GWT:结合两种范例

    是否可以使用 GWT 组件在 groovy 中开发应用程序 Luis 如果您想在服务器端使用 Groovy 并在 UI 上使用 GWT 那当然是可能的 您可以使用 Grails 服务器上的 Groovy Web 框架 并且Grails GW
  • 将表达式插值到表达式中

    我想在宏内部构建一个带有关键字参数的构造函数 并且第一个关键字参数需要用于表达式 我无法将该表达式放入表达式中 这就是我的意思 说我有一个类型 type Test ex end 其中包含一个表达式 我想创建一个构造函数origex a b
  • 在 RaphaelJS 中制作 100% 宽度的图表?

    我见过 Flash 中的图表和其他东西基本上可以很好地适应浏览器的大小或它们所在的灵活元素 我不太熟悉 raphaelJS 但你能做到这一点吗 如果是的话 如何 在 raphaeljs 中 您可以对 Raphael 对象调用 setSize
  • hadoop map reduce -archives 不解压存档

    希望你能帮我 我在 hadoop map reduce 上遇到了一个令人头疼的问题 我已经在 hadoop 版本 1 0 3 上成功地在 map reduce 上使用了 files 选项 但是 当我使用 archives 选项时 它会复制文
  • 有或没有[弱自我]

    我的情况很奇怪 我的服务器当前已关闭并收到 503 http 状态代码 根据给定的代码如下 代码进入 if 条件 但是当我将调试点置于let error self decodeErrorMessage data data statusCod
  • 为什么 isProviderEnabled() 方法即使在建筑物内部也始终返回 true

    在这种情况下 我使用 GPS 作为提供商 我尝试在建筑物内行走 但似乎找不到位置 是的 在大楼里 GPS 不起作用是有道理的 那么 为什么 isProviderEnabled 返回 true 呢 无论如何 我应该如何实现 搜索 GPS 信号
  • C++ STL map::operator[] 在被删除的条目上完成

    std map