1
2
A—将数组(大小为1)分配给堆栈 指定foo.pstr指向堆栈上的数组 C—将基[i]赋给数组的第一个元素(在堆栈上) for循环退出当前循环后,变量loopStr不再在作用域中,其内容未定义。下一次循环迭代很可能会重复使用相同的内存地址(因此,为什么在最后打印时会得到相同的值)。如果您打开了优化,您的C编译器可能会警告您不要获取局部变量的地址(尽管我对此表示怀疑)。 在不使用任何堆分配的情况下,我认为您唯一的选择是修复odp中foo.pstr的大小,即。
或者在堆上分配数组作为odp初始化的一部分
最好还是使用std::wstring,因为您使用的是c++,让它为您进行内存分配和管理。 |
2
4
你在这里得到的是未定义的行为。每次通过循环创建和销毁一个数组,然后将其地址分配给foo.pstr并将其推回到向量中。编译器只是碰巧每次都在同一个位置创建该数组(这是合乎逻辑的,但不是必需的)。当你把它打印出来的时候,从技术上讲,你是在打印删除的数据,只是系统没有因为它不是受保护的空间而打你一巴掌。内存位置只包含上次分配的内容。
|
3
2
看起来像
|
4
2
这不管用,至少不是你想要的方式。loopStr是一个数组,但也可以像指针一样使用它。因此,当您分配给指针foo.pstr时,它将获得loopStr中第一个元素的地址。这恰好是在堆栈上分配的局部变量,并且仅在for循环内有效。 |
smg_08 · 使用for循环在pandas数据帧中进行筛选[重复] 1 年前 |
stats_noob · R: 记录某个“行为”发生的循环的索引? 2 年前 |
nickolakis · 基于R中的列名复制列 2 年前 |
khalid Morrshid · 循环语法C语言 2 年前 |
Alex · 如何向嵌套字典json添加值? 2 年前 |