1

我正在使用霍夫变换在 android 上的图像中查找圆圈。有一次我得到一个堆栈溢出:

12-03 16:18:20.999: I/dalvikvm-heap(21563): Grow heap (frag case) to 29.662MB for 2253716-byte allocation
12-03 16:18:21.014: I/dalvikvm(21563): threadid=11: stack overflow on call to Lorg/DTS/boltSizer/ImageProcessing/hystThresh;.hystConnect:VII
12-03 16:18:21.014: I/dalvikvm(21563):   method requires 44+20+12=76 bytes, fp is 0x5e949338 (56 left)
12-03 16:18:21.014: I/dalvikvm(21563):   expanding stack end (0x5e949300 to 0x5e949000)

这是引发错误的地方:

    private void hystConnect(int x, int y) {

        int value = 0;
        for (int x1=x-1;x1<=x+1;x1++) {
            for (int y1=y-1;y1<=y+1;y1++) {
                if ((x1 < width) & (y1 < height) & (x1 >= 0) & (y1 >= 0) & (x1 != x) & (y1 != y)) {
                    value = (input[y1*width+x1])  & 0xff;
                    if (value != 255) {
                        if (value >= lower) {
                            input[y1*width+x1] = 0xffffffff;
                            hystConnect(x1, y1);
                            ran++;

                        } 
                        else {
                            input[y1*width+x1] = 0xff000000;
                        }
                    }
                }
            }
        }

    }   

我想我明白这意味着什么,但是如何避免这种情况。如果您需要更多正在运行的代码,请询问。

4

1 回答 1

0

从这个开始:

如何增加 Java 堆栈大小?

Android:增加调用堆栈大小

最终,这只是意味着您的函数正在消耗大量内存,您必须找到更有效的算法。这类似于如果您发布了一个O(e^n)函数并询问如何使其运行得更快。如果这是您的情况,那么您将需要研究一种更节省空间的算法来使用。

于 2012-12-03T22:34:10.543 回答