[问题] 递回呼叫函数发生存取违规!?

楼主: ericerix (Ponwar)   2020-07-24 15:30:16
开发平台(Platform): (Ex: Win10, Linux, ...)
visual studio 2017
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
c
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
stdio.h
stdlib.h
string.h
问题(Question):
发生存取违规
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版,禁止使用图档)
char *first(char target[512][512],bool check[],int n)
补充说明(Supplement):
在这个函数当中,有递回呼叫自己,
然而并不是无限循环,因为输入的资料不会使他有无限循环的存在
而在逐步测试的时候,
在main中第一次call他,可以进去;
进去之后,再call一次还是可以继续;
而这次再call的时候,就会发生这个问题
https://i.imgur.com/btR6Y86.jpg
发生的程式码片段就是在执行"char *first(char target[512][512],bool check[],int n)"时
然后跳到
https://i.imgur.com/efwYnOU.jpg
才出现存取违规
怎么会这样!?
作者: firejox (Tangent)   2020-07-24 15:45:00
请贴程式码,我们没有水晶球
作者: moebear (萌熊)   2020-07-24 16:43:00
不知道26万会不会爆 但是太大是会爆的摁..你多次循环应该是爆了吧 你配少一点
作者: nh60211as   2020-07-24 17:17:00
没有,单纯是windows编出来的程式默认stack很小先把函式里的char rule[512][512];改成动态配置
作者: LPH66 (-6.2598534e+18f)   2020-07-24 17:48:00
这个阵列空间如二楼所说的是 26 万 (256K)stack 一般不会配太大, 所以这种量的区域变量很快就会爆
作者: joey11121 (KRjoyz)   2020-07-24 23:42:00
碰触到kernel memory了吧
作者: Lipraxde (Lipraxde)   2020-07-25 00:26:00
楼上的 kernel memory 指的是 kernel space?
作者: kaneson (Lance)   2020-07-25 09:38:00
这个参数传法很有问题吧
作者: cphe (魔鬼藏在垃圾筒里)   2020-07-27 23:21:00
跟什么现代电脑没关系,先读点OS吧
作者: jacky1989   2020-07-29 22:40:00
请爱用动态配置,系统没这么多堆叠给你用
作者: Killercat (杀人猫™)   2020-07-31 11:22:00
user space你写的在离谱也不可能那么简单碰到kernel space,所有user space的memory都是virtual的可以参考一下保护模式的运作原理kernel memory不可能map给user space app,真有的话那就是kernel bug了,可以直接去kernel.org report更不会有你随便写写就能碰到kernel memory的事情

Links booklink

Contact Us: admin [ a t ] ucptt.com