函数内的指针变量指向堆栈还是堆?

时间:2014-02-16 10:36:08

标签: c pointers memory

void foo (char *input) {
  char *myVar;
  *myVar = *input;
}

据我所知,如果我使用myVar分配malloc(sizeof(char)内存,它将指向,但如果我不分配内存,当我尊重它时,编译器如何处理内存分配?它会在堆栈中分配吗?

2 个答案:

答案 0 :(得分:4)

变量myVar在堆栈上(对于在堆栈上存储局部变量的编译器),但它不指向任何地方。这意味着当您取消引用它时,您有未定义的行为

从技术上讲,myVar的值将是不确定的(即看似随机),因此它将指向随机位置。这意味着取消引用可能有时导致崩溃,而其他时候可能不会。

答案 1 :(得分:2)

  

当我尊重它时,编译器如何处理内存分配

解除引用指针的值(地址)不分配内存。 解除引用只是让您访问内存引用,即指针指向的内容。

从哪里分配了这个内存(如果有的话)取决于指针的内容。 LS。

注意:解除引用未初始化的指针会引发未定义的行为,就像对未初始化的内存/变量的任何读取加入一样。