【问题标题】:C++ Resize Dynamic Array [closed]C ++调整动态数组大小[关闭]
【发布时间】:2014-02-10 01:45:56
【问题描述】:

我一直在尝试调整这个数组的大小,它编译得很好,但是当我运行它时,我得到了这个非常长的错误消息。

这是函数的代码:

void arrayClass_Namespace::arrayClass::resize(int newSize)
{
    std::cout << "\nPlease input a new size for the array: ";
    std::cin >> newSize;

    assert(newSize < MAX_SIZE);

    int *resize_arr = new int[newSize];
    for(int index = 0; index < size; index++)
    {
        resize_arr[index] = arr[index];
    }

    size++;
    arr = resize_arr;
    delete[] resize_arr;
}

下面是更新后的代码,现在可以正常工作了:

void arrayTools_GabriellaRamirez::arrayTools::resize(int newSize)
{
    std::cout << "\nPlease input a new size for the array: ";
    std::cin >> newSize;

    assert(newSize < MAX_SIZE);

    int *resize_arr = new int[newSize];
    for(int index = 0; index < size; index++)
    {
        resize_arr[index] = arr[index];
    }

    for(int index = size; size < newSize; index++)
    {
        size++;
    }

    for(int index = size; size > newSize; index++)
    {
        size--;
    }

    delete [] arr;
    arr = resize_arr;
}

【问题讨论】:

  • 如果您使用std::vector&lt;int&gt; arr 而不是int* arr,这些问题就会消失。
  • 以后请发布错误信息。 “非常长的错误消息”对未来的访问者没有任何帮助。
  • @Robᵩ std::cout &lt;&lt; "\nPlease input a new size for the array: "; 我认为他在这里不需要生产代码,只是练习。
  • @remyabel 抱歉,我不太明白错误信息。从回溯开始,然后它包含所有这些字符,并因核心转储而中止。
  • @Robᵩ 是的,如果可以的话,我会使用向量,但我主要是在练习数组。

标签: c++ arrays dynamic-allocation


【解决方案1】:

delete[] resize_arr 正在删除您创建的新数组。你需要做的

delete[] arr;
arr = resize_arr;

顺便说一句,您不会检查以确保新数组大小不小于used,因此您可能会写出新数组的范围。

我也认为size++ 不正确。

【讨论】:

  • 太棒了!非常感谢!现在工作得很好。
猜你喜欢
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
相关资源
最近更新 更多