一般来说,我对编程有点陌生,并且在声明 3D 和 4D 数组时遇到了问题。我在主函数的开头有几个这样的声明,但我已将问题范围缩小到这 4 个:
string reg_perm_mark_name[64][64][64];
short reg_perm_mark_node_idex[64][64][64];
short reg_perm_mark_rot[64][64][64][4];
short reg_perm_mark_trans[64][64][64][3];
当我使用这些运行程序时,我在可执行文件中收到“System.StackOverflowException”。我更喜欢一种动态分配它们的方法,我现在的方式无论如何都是临时的,我不确定如何正确声明数组指针。
例如,我在 4D 数组 reg_perm_mark_trans 中使用的 4 个元素是 [节点索引][区域索引][标记索引][xyz 坐标]。另外,一次总共声明了 35 个多维数组。 (大多数是一维和二维)我不确定这是否有帮助。
有人可以告诉我如何使这些 4d 数组工作,或者如何使它们使用指针或向量动态分配吗?请描述一下,我还在学习。
为简单起见假设sizeof(string) == 2
(可能更多),您尝试在堆栈上分配 (64^3)*9*2 字节。总计 4,718,592 字节,或大约 4.5 MiB。最有可能的是,您的堆栈上没有 4.5 MiB 可用空间。
由于这些变量是在中声明的main()
,你有两种可能的解决方案:
声明它们static
.
向外面宣告他们main()
,作为全局变量。
这将导致它们在程序启动之前分配,而不是在堆栈上。这两种方法之间的唯一区别是它们是否在其他函数中可见。
可能还有一种方法可以告诉您的编译器该程序需要更多的堆栈空间,但我认为使它们静态可能是更好的解决方案。如果它们的功能不是main()
不过,您可能需要做其他事情。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)