c++ - 这行代码是如何工作的?

标签 c++ c memory pointers

所以我最近在看某人的代码,我发现编译器没有报错,也没有以下任何运行时错误:

const char *p = "I didn't malloc...";

上面的代码有效,但我想知道如何。这就是我认为正在发生的事情。谁能证实这一点?

所以“我没有 malloc...”在编译时在堆栈上静态分配,地址被传递给指针 p。类似于静态数组的分配方式。我对此有 90% 的把握,但一些确认会有所帮助。

谢谢。

最佳答案

你有一个字符串文字 "I didn't malloc..." 位于只读内存中的某处(确切地说是实现定义的位置),它由指针 p 指向

需要注意的重要一点是,任何更改此字符串文字的尝试都将导致未定义的行为

事实上,在 C++ 中,不推荐像您那样声明字符串文字。
所以在 C++ 中,您应该使用 const 限定符,例如:

const char *p = "I didn't malloc...";

关于c++ - 这行代码是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8458379/

相关文章:

VS2008 中的 C++ STL:std::ostringstream 在大量分配/清除使用后抛出 std::bad_alloc

c++ - Template 模板方法的特化

c++ - C/C++ 可以通过查询类来获取实例成员的 "list"?

c++ - 静态数组与动态数组的 C/C++ 性能

c++ - 无法在嵌套模板类型之间转换

c++ - lineEdit 的显示困惑 - Qt

c - GCC 编译时浮点优化

c - 为什么 printf 不使用 read() 函数显示放入缓冲区的数据?

C 奇怪有趣的程序输出

ios instruments vm tracker IOKit 疯狂的住所大小