void foo (char *input) {
char *myVar;
*myVar = *input;
}
据我所知,如果我使用myVar
分配malloc(sizeof(char)
内存,它将指向堆,但如果我不分配内存,当我尊重它时,编译器如何处理内存分配?它会在堆栈或堆中分配吗?
答案 0 :(得分:4)
变量myVar
在堆栈上(对于在堆栈上存储局部变量的编译器),但它不指向任何地方。这意味着当您取消引用它时,您有未定义的行为。
从技术上讲,myVar
的值将是不确定的(即看似随机),因此它将指向随机位置。这意味着取消引用可能有时导致崩溃,而其他时候可能不会。
答案 1 :(得分:2)
当我尊重它时,编译器如何处理内存分配
解除引用指针的值(地址)不分配内存。 解除引用只是让您访问内存引用,即指针指向的内容。
从哪里分配了这个内存(如果有的话)取决于指针的内容。 LS。
注意:解除引用未初始化的指针会引发未定义的行为,就像对未初始化的内存/变量的任何读取加入一样。