int main(){
char * ch = "hi";
char ** chh = &ch;
chh[100] = "hh";
}
chh[100] = "hh"
在做什么?
"hh"
的地址存储在哪里?
最佳答案
"hi"
和 "hh"
是字符串文字,都是 const char[3]
类型,它们会衰减为 const char *
指向它们的第一个 char
元素的指针。这些数组在编译时存储在程序的只读静态内存中。
在运行时,"hi"
在静态内存中的地址被存储在 ch
指针中(这在 C++11 及更高版本中是非法的,因为非 const char*
指针不能指向 const char
数据),则 ch
的地址存储在 chh
指针。
语句 chh[100]="hh"
是未定义的行为。 chh
指向ch
,它存储在调用线程的堆栈中。 chh
不是指向 101+ char*
指针数组的指针,因此索引到 chh
的第 100 个槽是非法的(仅索引 0是有效的,因为所有变量都可以视为 1 个元素的数组)。此代码正在进入您不拥有的堆栈内存,并将 "hh"
的地址写入 chh
的第 100 个槽正在破坏该堆栈上的随机内存(如果它没有因 AccessViolation/SegFault 而彻底崩溃)。
关于c++ - 内存分配如何在指向 char 的双指针中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63584542/