簡體   English   中英

為什么我這個地址在主 function 初始化后被更改? (C)

[英]Why I this address is being changed after initialization in main function? (C)

我是 C 的新手,我正在處理的項目遇到一些問題。

在 vm.h

#define STACK_MAX 256
typedef double Value;

typedef struct {
   Value values[STACK_MAX];
   Value* top;
}

typedef struct {
   Chunk* chunk;
   uint8_t* ip; // Instruction pointer
   Stack stack;
} VM;

VM initVm();
void resetStack(Stack* stack);

在 vm.c

void resetStack(Stack* stack) {
    stack->top = stack->values
}

VM initVM() {
    VM vm;
    resetStack(&vm.stack);
    return VM;
}

在main.c

int main() {
    VM vm = initVM();

    ... 
}

好的,這就是問題所在。 在我初始化 vm 之后,vm.stack.top 指向 vm.stack.values[0] (我不知道為什么用垃圾值而不是零填充),但是無論如何,一條指令之后,vm。 stack.top 已更改並開始指向其他內容,或者有時 vm.stack.values[0] 的地址更改為另一個。

這里的 top 屬性很好地指向了數組的開頭

返回后指針保持不變,但數組的第一個元素的地址發生了變化

問題是在本地 scope 中聲明了 VM。 在堆中分配 VM 解決了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM