数组不起作用,但显示std :: bad_alloc(如何解决此问题?)

时间:2018-11-01 21:34:15

标签: c++ arrays

刚刚开始研究c ++,我必须制作一个具有获取最大数组值并将其打印的函数的动态数组。而且我的代码似乎有问题。我做错了什么,请帮忙(非常感谢批评):

 #include <iostream>
using namespace std;

int getmax(int* arr,int n)
{
    int res=arr[0];
    for (int i=0;i<n;i++)
    {
        if (res<arr[i]) res=arr[i];
    }
    return res;
}

int main()
{
    int*arr;
    int n;
    arr=new int[n];
    cout<<"Enter array length: ";
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cout<<"Enter array number "<<i+1<<". : ";
        cin>>arr[i];
    }
    int maxi;
    maxi=getmax(arr,n);
    cout<<"Biggest number in array is "<<maxi;
    delete[]arr;
return 0;
}

1 个答案:

答案 0 :(得分:1)

这些评论似乎已经解决了您的问题,但是由于您要求(建设性)批评,因此您应该真正学习现代C ++。在现代C ++中,我们仅在没有其他方法时才使用裸指针。在适当的时候,我们也会利用标准库。只要您学习了语言和库,这两件事将迅速使您成为更强大的程序员,并减少出错的机会。

以下是您的程序应用以下原则的示例:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
    size_t n;
    cout<<"Enter array length: ";
    cin>>n;

    vector<int> arr(n); // Create a vector with n integers

    // Iterate over the vector
    for( auto i = arr.begin(); i != arr.end(); ++i )
    {
        cout<<"Enter array number "<< (i-arr.begin())+1 << ". : ";
        cin>>*i; // Assign the input to the vector element through the iterator
    }

    // Get an iterator pointing to the largest element in the vector
    auto maxi = max_element(arr.cbegin(), arr.cend());
    cout<<"Biggest number in array is "<< *maxi << '\n';

    return 0;
}

std::vector构造函数分配内存,而arr超出范围时,析构函数释放内存。不再需要繁琐的匹配newdelete。当您需要将对象的生存期延长到当前范围之外时,请使用具有对象所需生存期的智能指针或容器。