各位老师好,我们写了一个建模函数,在调用ToElement函数时会出现ORD一场崩溃的情况:
调了很久也没有发现原因,能否帮忙远程看看??
把CreateLinear的第二个参数换成BOUNDARY_TYPE_Outer试试,如果还不行请改写为一个单独的函数,这个函数不需要任何参数,也不调用其他您编写的函数以及全局变量,如果这个函数运行仍然有问题的话,您将这个单独的函数提供给我们即可,这样只要我们可以复现您的问题,不需远程就可帮您查找问题的原因。
我们现在这个ToElement函数是在我们读取了一个数据库的数据后会报错,并不是每个地方调用该函数都会报错。
但是我们目前无法通过数据定位到该问题。
既然是这样那就要先确定是那组数据造成的,进而分析这组数据哪里不合理,如何确定哪组数据有问题,方法有很多,例如在函数中先定义一个静态变量,每次运行此函数时,都将这个静态变量增加1,然后判断这个变量大于100时直接返回,如果运行没问题的话,那就说明前100组数据没问题,然后再把判断条件换成200,如果出问题了,那就是100到200这里边的数据造成的,再进一步缩小这个判断值去定位有问题的数据。当然我这里只是随便给了个值100,具体多少可以根据数据量的大小去设置。
查出来了,是因为有一个结构体中的的一个double数组开辟的空间太大:
double arr[100][9];
然后把声明空间缩小了就没报错了。
但是我有一些疑问,按道理这种写法的内存消耗也只是KB级的,为啥会导致ORD崩溃?是否SDK有什么限制?
也不一定是内存耗尽的原因,这种代码逻辑的问题有时候确实很难查找。如果怀疑是SDK有问题,最好的确认方法就是另写一个单独的函数去测试,这样才能尽可能地排除代码逻辑有问题造成地影响。而且如果能复现问题的话, 将这个单独的函数提供给我们即可,我们能复现问题才好查找原因。甚至有时候在自己编写这个单独的函数的时候,就会发现是哪里出了问题。