You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++全局动态数组排序函数异常及内存释放问题求助

问题分析与修复

核心问题1:数组内存分配时机错误

你在全局作用域直接用array_size初始化动态数组,但此时array_size还未被用户输入赋值(全局int变量默认初始值为0),导致分配的数组大小为0,后续输入元素时必然越界访问内存,触发未定义行为(比如元素数量超过2时崩溃)。

修复方案:把数组分配放到create_array_cmd函数里,等用户输入array_size之后再执行内存分配:

int array_size;
int* array = nullptr; // 先初始化为空指针

void create_array_cmd()
{
    cout << "Please input your desired array size: ";
    cin >> array_size;
    array = new int[array_size]; // 输入size后再分配内存
    cout << "Please key-in the numeric characters you wish to save: " << endl;
    for (int i = 0; i < array_size; i++)
    {
        cout << "Array [" << i + 1 << "]: ";
        cin >> array[i]; // 无需::,全局变量无局部同名遮蔽
    }
}

核心问题2:排序函数逻辑彻底错误

你当前的array_sort_cmd嵌套了两层for循环,还在循环内部修改循环变量j,直接导致死循环或排序逻辑混乱,程序执行到这里就卡住。这是把插入排序的写法完全搞错了,插入排序只需要一层外层循环,内层用while往前比较即可。

修复后的排序函数(标准插入排序实现):

void array_sort_cmd()
{
    cout << "The sorted values are: " << endl;
    
    // 插入排序正确实现
    for (int i = 1; i < array_size; i++)
    {
        int k = array[i]; // 当前要插入的元素
        int j = i - 1;
        // 往前查找比k大的元素,逐个后移
        while (j >= 0 && array[j] > k)
        {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = k; // 插入到正确位置
    }

    for (int i = 0; i < array_size; i++)
    {
        cout << array[i] << " ";
    }
    cout << endl;
}

核心问题3:delete语法错误

释放动态数组的正确语法是delete[] array;,你写的delete array[];是错误的,编译器会直接报错。另外要在释放前判断指针是否为空,避免空指针错误。

修复后的main函数:

int main()
{
    create_array_cmd();
    print_values_cmd();
    array_sort_cmd();
    
    if (array != nullptr) {
        delete[] array; // 正确释放动态数组
        array = nullptr; // 防止野指针
    }
    return 0;
}

完整修正代码

#include <iostream>
using namespace std;

int array_size;
int* array = nullptr;

void create_array_cmd()
{
    cout << "Please input your desired array size: ";
    cin >> array_size;
    array = new int[array_size];
    cout << "Please key-in the numeric characters you wish to save: " << endl;
    for (int i = 0; i < array_size; i++)
    {
        cout << "Array [" << i + 1 << "]: ";
        cin >> array[i];
    }
}

void print_values_cmd()
{
    cout << "Here are the values you entered: " << endl;
    for (int i = 0; i < array_size; i++)
    {
        cout << array[i] << " ";
    }
    cout << endl;
}

void array_sort_cmd()
{
    cout << "The sorted values are: " << endl;
    
    for (int i = 1; i < array_size; i++)
    {
        int k = array[i];
        int j = i - 1;
        while (j >= 0 && array[j] > k)
        {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = k;
    }

    for (int i = 0; i < array_size; i++)
    {
        cout << array[i] << " ";
    }
    cout << endl;
}

int main()
{
    create_array_cmd();
    print_values_cmd();
    array_sort_cmd();
    
    if (array != nullptr) {
        delete[] array;
        array = nullptr;
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者Eryck Louisze Flores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:51