Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 装配框架重叠吗?_C_Gcc - Fatal编程技术网

C 装配框架重叠吗?

C 装配框架重叠吗?,c,gcc,C,Gcc,背景 typedef struct Result { int type; union { Err err; Table tbl; }; } Result; typedef struct Err { int status; String command; String err; } Err; Result *getres(...) { .... return &(Result) {....}; } void somefun(..)

背景

typedef struct Result {
  int type;
  union {
    Err err;
    Table tbl;
   };
} Result;

typedef struct Err {
  int status;
  String command;
  String err;
} Err;


Result *getres(...) {
  ....

  return &(Result) {....};
}

void somefun(..) {
  ...
  Result *res = getres(..);
  // (A)
  handleres(res);
}

void handleres(Result *res) {
  // (B)
  ...
}
(A) 在点A,res具有从getres传递的预期数据,但点(B)具有不同的数据,并且调试代码视图,使大多数res元素指针具有相同的res指针!!,不只是第一个元素,除了一个元素res->err->err

在装配意义上

getres返回指向eax中本地结果的指针,该指针映射到getres例程的span-start(ebp)到span-end(ebp)

问题


动态分配是可行的,但为什么静态定义的结构指针会这样,程序集框架会被使用并且-start(ebp)、-end(ebp)会被覆盖吗?

没有任何程序集的程序集问题?是的,堆栈会被重用。您不应该返回指向局部变量的指针(如果您正这样做的话),因为这些指针将在函数末尾超出范围,内存可能会被重用。@Jester那么当静态定义的结构指针有用时?@Jester回答了这个问题,您可以写下第一个问题的详细答案来结束这个问题吗?关于第二条评论的任何见解都可能重复