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

C++指针与数组求助:reverseArray函数在main中运行崩溃

解决reverseArray函数整合到main函数时的崩溃问题

嘿,我来帮你搞定这个问题!你说把reverseArray函数直接复制到main函数里程序就崩溃,这大概率是因为C++标准不允许在函数内部定义另一个函数(也就是嵌套函数)。虽然部分编译器有非标准的嵌套函数扩展,但这种写法很容易触发内存访问错误、栈溢出等问题,直接导致程序崩溃——这就是你遇到的核心问题。

正确的代码结构:函数放在main外部

按照C++标准写法,我们需要把reverseArray和printArray的实现放在main函数外面,通过函数原型提前声明即可。这里给你补全完整的可运行代码:

#include <iostream>
using namespace std;

// 函数原型声明
void reverseArray(int*, int);
void printArray(int*, int);

int main() {
    int size;
    cout << "请输入数组大小: ";
    cin >> size;

    // 动态分配数组内存
    int* arr = new int[size];
    cout << "请输入" << size << "个整数: ";
    for (int i = 0; i < size; ++i) {
        cin >> arr[i];
    }

    cout << "原数组: ";
    printArray(arr, size);

    // 调用反转函数
    reverseArray(arr, size);

    cout << "反转后的数组: ";
    printArray(arr, size);

    // 释放动态分配的内存,避免内存泄漏
    delete[] arr;
    return 0;
}

// reverseArray函数实现
void reverseArray(int* arr, int size) {
    for (int i = 0; i < size / 2; ++i) {
        // 交换首尾对应位置的元素
        swap(arr[i], arr[size - 1 - i]);
    }
}

// printArray函数实现
void printArray(int* arr, int size) {
    for (int i = 0; i < size; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

如果想在main内封装反转逻辑:用Lambda表达式

要是你确实想把反转逻辑写在main函数内部,可以用C++11及以后支持的Lambda表达式,这是标准写法,不会触发崩溃:

#include <iostream>
using namespace std;

void printArray(int*, int);

int main() {
    int size;
    cout << "请输入数组大小: ";
    cin >> size;

    int* arr = new int[size];
    cout << "请输入" << size << "个整数: ";
    for (int i = 0; i < size; ++i) {
        cin >> arr[i];
    }

    cout << "原数组: ";
    printArray(arr, size);

    // 用Lambda表达式实现反转逻辑,直接写在main内
    auto reverseArray = [](int* arr, int size) {
        for (int i = 0; i < size / 2; ++i) {
            swap(arr[i], arr[size - 1 - i]);
        }
    };

    reverseArray(arr, size);

    cout << "反转后的数组: ";
    printArray(arr, size);

    delete[] arr;
    return 0;
}

void printArray(int* arr, int size) {
    for (int i = 0; i < size; ++i) {
        cout << arr[i] << " ";
    }
    cout << endl;
}

额外注意事项

  • 动态分配的数组一定要用delete[]释放,否则会造成内存泄漏;
  • 反转数组时用size/2作为循环终止条件,避免重复交换同一个元素;
  • 如果你之前的reverseArray函数本身有数组越界访问的逻辑错误,也可能导致崩溃,但最可能的原因还是嵌套函数的非标准写法。

内容的提问来源于stack exchange,提问作者DiabolicNick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:31:22