void ShowDlg() { NCGPathSelectionDialog dlg{gameId, -1, mainWindow()}; dlg.exec(); } VS调试c++程序,不关闭exe的情况下,没啥每次重新调用ShowDlg,dlg的地址都不变
时间: 2025-02-05 10:09:20 浏览: 25
在C++中,每次调用函数时,局部变量通常会在栈上分配内存。每次调用`ShowDlg`函数时,`NCGPathSelectionDialog dlg{gameId, -1, mainWindow()};`都会在栈上创建一个新的`NCGPathSelectionDialog`对象。因此,每次调用`ShowDlg`函数时,`dlg`的地址可能会变化。
然而,如果你发现每次调用`ShowDlg`函数时,`dlg`的地址都不变,可能是由于以下原因:
1. **编译器优化**:编译器可能会进行一些优化,使得局部变量的地址在多次调用中保持不变。
2. **调试器行为**:调试器在调试过程中可能会保持变量的地址不变,以便于调试。
3. **内存分配**:如果`NCGPathSelectionDialog`对象的内存分配不是在栈上,而是在堆上(例如使用`new`操作符),那么每次调用时地址可能会保持不变,直到对象被显式销毁。
以下是一些可能的解释和解决方案:
1. **检查编译器优化**:
确保编译器优化选项没有导致变量地址保持不变。你可以尝试禁用优化选项,看看地址是否发生变化。
2. **调试器设置**:
调试器的设置可能会影响变量的地址。你可以尝试在不同的调试器中运行程序,或者调整调试器的设置。
3. **内存分配方式**:
如果你希望每次调用时`dlg`的地址都变化,可以确保对象在栈上分配,而不是在堆上。例如:
```cpp
void ShowDlg()
{
NCGPathSelectionDialog dlg{gameId, -1, mainWindow()};
dlg.exec();
}
```
这样,每次调用`ShowDlg`函数时,`dlg`都会在栈上分配新的内存地址。
阅读全文
相关推荐
















