newarray_overflow.java
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· Java 代码 · 共 89 行
JAVA
89 行
/* This test checks for two slightly different overflow scenarios in * array allocation. * * The first is that the number of bytes needed for an array size * overflows on a 32 bit machine. * * The second is that on a 64 machine, the number of bytes silently * gets truncated, resulting in too small an object being * allocated. */class newarray_overflow{ static boolean failed = false; static void int_check() { int[] x; try { x = new int [1 << 30]; } catch (OutOfMemoryError e) { return; } /* If we really get away with it (64 bit machine), that's cool. */ if (x == null) { System.err.println ("int check: new returned null."); failed = true; return; } try { // Only check a few places so we don't thrash too badly. for (int i = 0; i < x.length; i += (1 << 24)) if (x[i] != 0) failed = true; } catch (Throwable e) { System.err.print ("int check: "); System.err.println (e); failed = true; } } static void object_check() { Object[] x; try { x = new Object [1 << 30]; System.err.println ("Alloc succeeded."); System.err.println (x); } catch (OutOfMemoryError e) { return; } /* If we really get away with it (64 bit machine), that's cool. */ if (x == null) { System.err.println ("Object check: new returned null."); failed = true; return; } try { for (int i = 0; i < x.length; i += (1 << 24)) if (x[i] != null) failed = true; } catch (Throwable e) { System.err.print ("Object check: "); System.err.println (e); failed = true; } } public static void main (String[] ignore) { int_check(); object_check(); if (!failed) System.out.println ("ok"); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?