user-0 提问: 怎么就不排序呢，还内存泄漏？

回复:
user: user-1
content: 引用 1 楼 SFangtao2012 的回复:#include <stdio.h> void bubble_sort(int a[],int n) { 	bool change; 	int i,j; 	for(i=n-1,change=true; i>=1&&change; i--)			//这里i--，不是i++ 	{ 		change=false; 		for( j=0; j<i; j++) 		{ 			if(a[j]<a[j+1]) 			{ 				int elem; 				elem=a[j+1]; 				a[j+1]=a[j]; 				a[j]=elem; 			} 			change=true; 		} 	} 	for(i=0; i<n; i++) 	{ 		printf("%d",a[i]); 	} } int main() { 	printf("Hello world!\n"); 	int a[]= {1,2,3,4,5,6}; 	int n=6; 	bubble_sort(a,n); 	return 0; } ++ 内存泄露应该出在这儿，数组越界~~~

user: user-0
content: 引用 7 楼 zhao4zhong1 的回复:崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。 赵老师能耐心为我讲这么多，我也感觉自己相当浮躁，沉不下心，不过我还是很明白，这不能当作偷懒的借口，以后就像你说的这么去做了（在这之前，我还真不知道这些调试的方法），谢谢

user: user-2
content: 崩溃的时候在弹出的对话框按相应按钮进入调试，按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。  代码功能归根结底不是别人帮自己看或讲解或注释出来的；而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒：再牛×的老师也无法代替学生自己领悟和上厕所！ 单步调试和设断点调试（VS IDE中编译连接通过以后，按F10或F11键单步执行，按Shift+F11退出当前函数；在某行按F9设断点后按F5执行停在该断点处。）是程序员必须掌握的技能之一。

user: user-0
content: 引用 5 楼 taiyangshen2012555 的回复:[quote=引用 3 楼 spaceman10 的回复:] [quote=引用 2 楼 taiyangshen2012555 的回复:] 刚才百科下内存泄漏，说是动态分配的空间未被回收造成部分内存不可用，可是我这里就没有用malloc，realloc，new这些呀，也不知道内存是被哪个部分给占用，然后又没被我释放的？  你这个问题是数组越界，c++内存分5种，在栈上的内存是系统自动分配的。[/quote] 这个“栈”是什么东西，能给我解释下不？[/quote]我知道栈的定义，但这里的栈不是我定义的，那就应该是系统里面的吧，那用于什么地方，什么时候启用的？

user: user-0
content: 引用 3 楼 spaceman10 的回复:[quote=引用 2 楼 taiyangshen2012555 的回复:] 刚才百科下内存泄漏，说是动态分配的空间未被回收造成部分内存不可用，可是我这里就没有用malloc，realloc，new这些呀，也不知道内存是被哪个部分给占用，然后又没被我释放的？  你这个问题是数组越界，c++内存分5种，在栈上的内存是系统自动分配的。[/quote] 这个“栈”是什么东西，能给我解释下不？

user: user-0
content: 引用 1 楼 SFangtao2012 的回复:#include <stdio.h> void bubble_sort(int a[],int n) { 	bool change; 	int i,j; 	for(i=n-1,change=true; i>=1&&change; i--)			//这里i--，不是i++ 	{ 		change=false; 		for( j=0; j<i; j++) 		{ 			if(a[j]<a[j+1]) 			{ 				int elem; 				elem=a[j+1]; 				a[j+1]=a[j]; 				a[j]=elem; 			} 			change=true; 		} 	} 	for(i=0; i<n; i++) 	{ 		printf("%d",a[i]); 	} } int main() { 	printf("Hello world!\n"); 	int a[]= {1,2,3,4,5,6}; 	int n=6; 	bubble_sort(a,n); 	return 0; } 啊！我怎么老这么马虎，这个程序前面一次被我输错了一次，后来改的时候只改了for的初始条件，却忘了改循环变量的赋值语句了，汗，这么说，就是我从a[n-1]的时候就占用了数组a以外的内存，也没法释放，就造成了内存泄漏，终于懂了，谢谢

user: user-3
content: 引用 2 楼 taiyangshen2012555 的回复:刚才百科下内存泄漏，说是动态分配的空间未被回收造成部分内存不可用，可是我这里就没有用malloc，realloc，new这些呀，也不知道内存是被哪个部分给占用，然后又没被我释放的？  你这个问题是数组越界，c++内存分5种，在栈上的内存是系统自动分配的。

user: user-0
content: 刚才百科下内存泄漏，说是动态分配的空间未被回收造成部分内存不可用，可是我这里就没有用malloc，realloc，new这些呀，也不知道内存是被哪个部分给占用，然后又没被我释放的？

user: user-4
content: #include <stdio.h> void bubble_sort(int a[],int n) { 	bool change; 	int i,j; 	for(i=n-1,change=true; i>=1&&change; i--)			//这里i--，不是i++ 	{ 		change=false; 		for( j=0; j<i; j++) 		{ 			if(a[j]<a[j+1]) 			{ 				int elem; 				elem=a[j+1]; 				a[j+1]=a[j]; 				a[j]=elem; 			} 			change=true; 		} 	} 	for(i=0; i<n; i++) 	{ 		printf("%d",a[i]); 	} } int main() { 	printf("Hello world!\n"); 	int a[]= {1,2,3,4,5,6}; 	int n=6; 	bubble_sort(a,n); 	return 0; }