



























15 lff0305 2024 年 3 月 30 日十多年以前仔细研究过这个 char *s = "0123"。当时用的还是 VC6. 对于 Debug 版,“0123” 会被放到只读数据段里面(好像是叫.rdata). char* s 是个指向这个只读数据段中一小段数据的一个指针。任何对这个数据段的写操作都会引发段错误。 相应的这避免了两次调用相同的函数,结果不一致的问题。 test() { test(); 有意思的是上面的代码在 Release 版是没有出错的,打印出来两行 123 和 1a3 。 总之这个问题和系统的段页式内存管理,以及编译器连接器都有关系 |
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。