在另一个函数中初始化后无法访问 main 中的全局数组
Cannot access global array in main after initializing in another function
我很难理解为什么我已经在另一个函数中初始化了我的全局 2D 数组后,我无法在我的主函数中访问我的全局 2D 数组。编辑:忘了指定d
是在所有这些之前声明的已知 int 变量,通常是 3 或 4。
void init();
int **board;
int main(){
init();
cout << board[0][0];
}
void init(){
int **board = new int*[d];
for (int i = 0; i < d; i++){
board[i] = new int[d];
}
int n=d*d;
for (int i = 0; i < d; i++){
for (int j = 0; j < d; j++){
board[i][j] = n;
n--;
}
}
因此,当我尝试在main()
中访问board[0][0]
时,我会收到"0x00000000访问冲突"。
我进入调试并看到board[0][0]
在main()
调用时指向0x000000
,但是如果我尝试在 init()
函数中调用它,例如在最后,它工作正常,我可以访问任何变量。
您正在创建一个新的临时变量:
int **board = new int*[d];
这是内存泄漏,该功能后无法访问内存。你可以这样做:
board = new int*[d]; //remember to delete []!
我看到你已经标记了你的问题[c ++]。如果是这种情况,您应该使用标准库,而不是处理原始指针。 std::vector
和std::array
浮现在脑海中。
void init(){
int **board = new int*[d];
在这里,您在阻止全局变量board
的函数中定义一个局部变量board
。
相反,直接分配值,不要定义另一个变量:
void init(){
board = new int*[d];
相关文章:
- 函数是否可以访问传递给main()的参数
- 有没有办法通过 main 函数访问受保护的矢量大小而无需将其转换为公共?
- 访问除main.cpp之外的.cpp文件中的QMLEngine/rootObject属性
- 在 main() 中访问类成员时C++分段错误
- main() 对连续运行的线程中的编辑值具有只读访问权限 - C++
- WriteConsole访问在功能调用中违反,而不是来自main()
- 是否可以从创建其创建的Main()之外的公共类成员访问公共类成员
- 将静态库转换为 DLL 会导致在 main 之前出现访问冲突
- 进入MAIN之前,访问违规位置
- main()::__lambda1 不是 std::_Tuple_impl<1ul, main()::__lambda1> 的可访问基础
- 如何使用 x86 程序集在 c 中访问 main 函数中的变量
- 从C (例如Main.CPP)访问注册类型实例
- C++ 如何从 main() 外部访问在 main() 中初始化的对象
- c++抛出0xC0000005:写入位置0xFEEEFEEE的访问冲突.从main返回时
- 通过派生类构造函数初始化后,从main()访问基类变量
- main.cpp 无法访问头文件和其他.cpp文件中的变量和函数
- 从main中的类访问数组
- main.exe 中0x779615de处未处理的异常:0xC0000005:访问违规写入位置0x003f0014
- 我无法使用指针数组从main访问函数(在类中)
- 从main访问类的受保护成员