【问题解决】
某大神说:假设size=10,那么char **strNumbers=(char**)(new int[size]),strNumbers指向分配区域大小为10*4=40。如果地址值是32位,这个strNumbers[i]读取正常;但是地址值是64位时,strNumber读到i=5时就会发生地址越界错误。内存地址是32位时,指针大小就是4个字节;内存地址是64位时,指针大小是8个字节。
而我的VS2013用的是win32控制台应用程序。
牛客网看来是64位的咯。
改成:char **strNumbers = (char**)(new long[size]); 
或者:char **strNumbers=new char*[size];
或者:char* strNumbers[1000];
都可以通过。
不过,以后还是用string类型省心,指针太容易出错了。