可变大小数组排序器无故窃听
Variable size array sorter bugging with no reason
我正在编写一个算法,要求用户先说出数组的大小,然后再说出它的值。之后,代码对值进行排序并返回结果。代码如下:
#include <iostream>
#include <string>
using namespace std;
int nvals, k, var, size;
void mysort(int arrayy[]){
int i,j;
int temp;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arrayy[j]>arrayy[j+1]){
temp=arrayy[j];
arrayy[j]=arrayy[j+1];
arrayy[j+1]=temp;
}
cout << "Your sorted array is: [";
for(i=1;i<10;i++) cout<<arrayy[i]<<", ";
cout << "].\n";
}
void main(int argc){
cout << "Number of variables" << endl;
cin >> size;
int *arrayy;
arrayy = new int[size];
for (int iii=0;iii<size;iii++){
cout << "Enter number:" << endl;
cin >> var;
arrayy[iii] = var;
}
mysort(arrayy);
}
不幸的是,编译后输出Your sorted array is: [
然后突然崩溃了!我一直在尝试操纵事物,看看我是否能让它发挥作用,但我没有成功。如何修复代码以使其正常工作?谢谢。
让我们假设 size == 4
.
您最终将设置 j == 3
,然后访问 arrayy[j]
和 arrayy[j+1]
。在那一刻访问 arrayy[j+1]
会引发未定义的行为,因为它在数组之外。
用“10”的所有条目替换 "size",您将得到所需的内容:
#include <iostream>
#include <string>
using namespace std;
int k, size;
void mysort(int arrayy[]){
int i,j;
int temp;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arrayy[j]>arrayy[j+1]){
temp=arrayy[j];
arrayy[j]=arrayy[j+1];
arrayy[j+1]=temp;
}
cout << "Your sorted array is: [";
for(i=1;i<=size;i++) {
if (i<size){
cout<<arrayy[i]<<",";
}
else
cout<<arrayy[i];
}
cout << "].\n";
}
void main(int argc){
cout << "Number of variables" << endl;
cin >> size;
int *arrayy;
arrayy = new int[size];
for (int iii=0;iii<size;iii++){
cout << "Enter number:" << endl;
cin >> arrayy[iii];
}
mysort(arrayy);
}
另外,我添加了一些格式化行,这样你的数组就可以在第二个括号附近得到很好的格式化。
我正在编写一个算法,要求用户先说出数组的大小,然后再说出它的值。之后,代码对值进行排序并返回结果。代码如下:
#include <iostream>
#include <string>
using namespace std;
int nvals, k, var, size;
void mysort(int arrayy[]){
int i,j;
int temp;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arrayy[j]>arrayy[j+1]){
temp=arrayy[j];
arrayy[j]=arrayy[j+1];
arrayy[j+1]=temp;
}
cout << "Your sorted array is: [";
for(i=1;i<10;i++) cout<<arrayy[i]<<", ";
cout << "].\n";
}
void main(int argc){
cout << "Number of variables" << endl;
cin >> size;
int *arrayy;
arrayy = new int[size];
for (int iii=0;iii<size;iii++){
cout << "Enter number:" << endl;
cin >> var;
arrayy[iii] = var;
}
mysort(arrayy);
}
不幸的是,编译后输出Your sorted array is: [
然后突然崩溃了!我一直在尝试操纵事物,看看我是否能让它发挥作用,但我没有成功。如何修复代码以使其正常工作?谢谢。
让我们假设 size == 4
.
您最终将设置 j == 3
,然后访问 arrayy[j]
和 arrayy[j+1]
。在那一刻访问 arrayy[j+1]
会引发未定义的行为,因为它在数组之外。
用“10”的所有条目替换 "size",您将得到所需的内容:
#include <iostream>
#include <string>
using namespace std;
int k, size;
void mysort(int arrayy[]){
int i,j;
int temp;
for(i=0;i<size;i++)
for(j=0;j<size;j++)
if(arrayy[j]>arrayy[j+1]){
temp=arrayy[j];
arrayy[j]=arrayy[j+1];
arrayy[j+1]=temp;
}
cout << "Your sorted array is: [";
for(i=1;i<=size;i++) {
if (i<size){
cout<<arrayy[i]<<",";
}
else
cout<<arrayy[i];
}
cout << "].\n";
}
void main(int argc){
cout << "Number of variables" << endl;
cin >> size;
int *arrayy;
arrayy = new int[size];
for (int iii=0;iii<size;iii++){
cout << "Enter number:" << endl;
cin >> arrayy[iii];
}
mysort(arrayy);
}
另外,我添加了一些格式化行,这样你的数组就可以在第二个括号附近得到很好的格式化。