c++ stack overflow

我有一段快排的算法,遇到了stack overflow的问题,但是这个问题很诡异
1、在自己的电脑上不会出现问题
2、在服务器上debug下会溢出,release没问题
我实在是想不明白为什么拉!

void quick_sort_int(int* s, unsigned int* o, int l, int r)
{
if (l < r)
{
//Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1
int temp;
int i = l, j = r;
int x = s[l];
while (i < j)
{
//cout<<i<<"\t"<<j<<endl;
while(i < j && s[j] >= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
{
s[i] = s[j];
temp = o[i];
o[i] = o[j];
o[j] = temp;
i++;
}
while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
{
s[j] = s[i];
temp = o[i];
o[i] = o[j];
o[j] = temp;
j--;
}
}
s[i] = x;
quick_sort_int(s, o, l, i - 1); // 递归调用
quick_sort_int(s, o, i + 1, r);
}
}

你指的溢出应该是程序运行的时候弹出的错误框吧?如果是的话,应该是你的服务器上没有装VS,也就是说,DEBUG模式下需要的一些dll不能被加载,导致程序出错。这也解释了你的release为什么能运行。
DEBUG编译的时候,一般用的是共享dll模式,生成的.exe运行的时候,会去系统里面找所需要的dll文件,如果找不到,就会报错。
release模式下编译出来的.exe文件里面包含了程序所需要运行的dll库。追问

我的Debug文件夹里已经放进去了opencv的dll文件。不知道这种情况下是哪些dll没被加载呢?

追答

你最好还是用release版的。我记得貌似有个工具是可以检测到你的程序用到了哪些dll文件。但是没有必要吧。本身来说,你的程序肯定在最终的时候是要放release版的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-09-27
服务器上的数据是边界条件,请贴所有代码,光有个函数你能看出来什么?追问

就是处理一个18万的数组,和对应的index
index就是[0,....,18万-1]
让index和mean同时排序

相似回答