【发布时间】:2015-04-22 22:37:08
【问题描述】:
我正在编写一个算法,要求用户告诉数组的大小,然后告诉它的值。之后,代码对值进行排序并返回结果。代码如下:
#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: [然后突然崩溃了!我一直在尝试操纵一些东西,看看我是否可以让它发挥作用,但我没有成功。如何修复代码以使其正常工作?谢谢。
【问题讨论】:
-
使用
std::vector不是更有意义吗?在这里看到像10这样的神奇数字通常表明如果超出该界限,将会出现可怕的错误。 -
天哪。我是一个白痴。只需将所有“10”替换为“size”,代码就可以正常工作了。
-
这是你学习的方式,所以不用担心。像这样使用 C 风格的数组充满了麻烦。这就是为什么 C++ 容器通常更好。例如,它们带有内置的排序功能,因此您不必自己编写。这种冒泡排序不会超出微不足道的数据量。
-
@Nobody:您在这里错过了
10:for(i=1;i<10;i++) cout<<arrayy[i]<<", "; -
谢谢@BillLynch。将其替换为
size,现在可以正常工作了。但我不完全确定它为什么会工作,即使它访问像arrayy[j+1]这样的值
标签: c++ arrays dynamic-memory-allocation