V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  xss  ›  全部回复第 2 页 / 共 23 页
回复总数  441
1  2  3  4  5  6  7  8  9  10 ... 23  
2017-06-28 14:32:58 +08:00
回复了 scinart 创建的主题 C 求 c++大神帮忙看下这段代码为啥不崩
@gnaggnoyil 我理解错文档里面的意思了.
http://en.cppreference.com/w/cpp/container/vector/emplace_back
这个里面的 placemant-new 应该是'as is'的意思, 对象在哪里构造, vector 就放在那里构造的对象....
2017-06-28 14:13:57 +08:00
回复了 revotu 创建的主题 C 求教: Linux 下一道 C 语言的经典面试题
@gnaggnoyil 你要是说平台是 arm, mips 这种架构下的 libc. 好吧, 那我无话可说, 的确有可能并不遵守默认的函数调用标准. 但是就楼主这个情形来说, 明显是 x86 下的 glibc. 或者我这么说更确切一点(?): 目前所有 x86 架构下的 lts linux 发行版本, glibc 的调用标准都是 cdecl.
哪位能指教一下不是上述情况的 glibc ?
2017-06-28 12:40:12 +08:00
回复了 scinart 创建的主题 C 求 c++大神帮忙看下这段代码为啥不崩
@enenaaa
[这里]( https://stackoverflow.com/questions/14187006/is-calling-destructor-manually-always-a-sign-of-bad-design)
有一个讨论, 是和 placement new 相关的.

现在比较明确的是, 这个问题应该是'未定义行为'的锅.

>> cat a.cxx
#include <vector>
#include <iostream>

int* g_p = NULL;
class Holder
{
int* p;
public:
Holder(int x) {
p=new int();
*p=x;
if(x == 3) {
g_p = p;
}
}
~Holder() {
std::cout<< "[destruct] pointer:" << p << " value:" << *p << std::endl;
delete p;
}
};
void foo(){
std::vector<Holder> v;
v.reserve(3);
v.emplace_back(1);
v.emplace_back(2);
v.emplace_back(3);
std::cout << "manual destruct start" << std::endl;
v[1].~Holder();
std::cout << "manual destruct end" << std::endl;
std::cout << "befor destruct" << std::endl;
std::cout<< "pointer:" << g_p << " value:" << *g_p << std::endl;
std::cout << "befor destruct end" << std::endl;
}
int main(int argc, char *argv[])
{
foo();
std::cout << "[out foo] pointer:" << g_p << " value:" << *g_p << std::endl;
return 0;
}
>> g++ a.cxx -o a

>> ./a
manual destruct start
[destruct] pointer:0x771c60 value:2
manual destruct end
befor destruct
pointer:0x771c80 value:3
befor destruct end
[destruct] pointer:0x771c40 value:1
[destruct] pointer:0x771c60 value:0
[destruct] pointer:0x771c80 value:3
[out foo] pointer:0x771c80 value:7806032

linux & g++下的结果, 比较有意思的是, 在 manually call dtor 之后, 0x771c60 的值是 0(多次运行, 值都是 0), 所以, 内存依然是有效的(?), 如果上述推论成立, 那么再次 delete 自然不会 double free.
2017-06-28 09:56:41 +08:00
回复了 sunzhenyucn 创建的主题 问与答 准备买买买却陷入了选择恐惧症, PS4Pro 还是电脑
PS 买完, 还要买游戏.
不过按照你的预算.
买完 ps 之后还能买 5 个左右的游戏.如果你不上 PSN 的话....
2017-06-28 09:35:56 +08:00
回复了 kexon 创建的主题 问与答 山东理科 548,军校没能提档,有推荐的院校么
我去, 现在山东都堕落到 548 就可以想军校的程度了么?
当年没有个 580+, 军校想都不敢想啊.....
2017-06-28 09:33:30 +08:00
回复了 techyan 创建的主题 问与答 求国内通过 CNNIC 仲裁域名指导
好像, 字母和数字, 包括汉字, 都不具备商标属性.(注意不是艺术字)
2017-06-28 09:31:29 +08:00
回复了 scinart 创建的主题 C 求 c++大神帮忙看下这段代码为啥不崩
@stormpeach 然而, emplace_back 是用 placement new 分配内存的啊, 虽然不在堆上, 但也是指针啊.
所以:
```
~vector();
Destructs the container. The destructors of the elements are called and the used storage is deallocated. Note, that if the elements are pointers, the pointed-to objects are not destroyed.
```
2017-06-28 09:25:36 +08:00
回复了 revotu 创建的主题 C 求教: Linux 下一道 C 语言的经典面试题
@snnn 你行你上, 你解释. 连 libc 库是哪个调用约定都不知道, 我还能说啥.
2017-06-27 19:26:34 +08:00
回复了 revotu 创建的主题 C 求教: Linux 下一道 C 语言的经典面试题
你需要知道的:
1. c 语言的函数调用规则是 cdecl
2. cdecl 调用规则参数由右向左入栈

因此, 计算顺序由右向左, 即
++a
a++
a++

然后你还需要知道的, gcc 的行为:
所有具有前置自增 /减运算符位置的参数, 需要等所有前&后置运算完成之后, 才能决定.
所有具有后置自增 /减运算符位置的参数, 一旦前面的运算符完成, 值即可决定.

所以
++a => a=6 -> 决定了第二个参数为 6, 因为第二个参数之前, 再无前置运算, 且第二个参数为后置运算
a++ => a=7 -> 决定了第一个参数为 7, 因为第一个参数之前再无前置运算, 且第一个参数为后置运算
a++ => a=8 -> 所有运算完成, 所有具有前置运算符位置的参数, 全部等于这个值

因此, 输出为:
7, 6, 8

再看个复杂的:
printf("%d %d %d %d %d", a++, a++, a++, --a, ++a);

从右向左:
++a -> 6, 前面还有前置运算, 该位置参数的值未确定
--a -> 5, 还有前置, 该位置未确定值, 但是前一个参数是后置运算, 因此前面一个参数的值为 5
a++ -> 6, 这个位置的参数由上一步确定, 为 5, 同时决定下面的一个 a++的值为 6
a++ -> 7, 上一个 a++的值为 7
a++ -> 8, 所有自增操作运算完毕, 参数位置为前置自增的值可以定了, 为 8

因此, 输出为:
7 6 5 8 8
我不太相信, LZ 办这张卡的时候, 办卡的人没说合约有期限.
至少我办过的卡里面, 有这么重要的时间限制, 办卡的人都跟我说过.
2017-06-27 17:19:29 +08:00
回复了 scinart 创建的主题 C 求 c++大神帮忙看下这段代码为啥不崩
为啥要崩?并没有看到 double free.
你的意思是, 你指望 Vector 在结束生命周期的时候自动调用里面元素的析构函数?
2017-06-27 10:03:20 +08:00
回复了 athanos 创建的主题 微信 公众号封杀 rss 的一些牢骚
@athanos 因为平台大, 生态好, 流量能进行真金白银的转化...这就是所谓的, 人在屋檐下, 不得不低头~
2017-06-27 09:47:33 +08:00
回复了 athanos 创建的主题 微信 公众号封杀 rss 的一些牢骚
那你自己去建博客呗.
sendmail
我也遇到了, 然而具体有什么影响?
2017-06-23 18:40:13 +08:00
回复了 tttty 创建的主题 机械键盘 HHKB 手感怎么样啊 最近想换机械键盘
HHKB 是静电容键盘哦(严肃脸)
2017-06-23 17:41:48 +08:00
回复了 baiyun888 创建的主题 信息安全 糟蹋了一个好域名
php 探针和 domain 有什么关系...
难道我不能高兴把这个域名指到有 php 探针的服务器上咩?
我不知道, 关我什么事.....
@10Buns 我管几年干啥, 应用根本就不能正常跑, 我还要等微软慢慢迭代不成.
1  2  3  4  5  6  7  8  9  10 ... 23  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2769 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 33ms · UTC 05:50 · PVG 13:50 · LAX 22:50 · JFK 01:50
Developed with CodeLauncher
♥ Do have faith in what you're doing.