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

C++编写equalsArray调用两次readNumbers报错修复

问题根因

你遇到的control reaches end of non-void function编译报错,是因为声明为返回bool类型的equalsArray函数,在length < 1的分支没有写返回值,函数执行到末尾没有return语句就会触发这个错误。除此之外你的代码还有几个会导致运行异常的问题:

  • readNumbers数组下标越界:new int[10]申请的数组合法下标范围是0~9,你写的循环i从1到10,会访问a[10]的越界内存,属于未定义行为
  • readNumbers中执行a++后再返回指针,返回的不是new申请的内存起始地址,后续调用delete[]释放内存时会直接程序崩溃
  • 括号匹配错误:main函数被写在了equalsArray函数内部,属于语法错误
  • 没有输出对比结果,也没有释放申请的堆内存,存在内存泄漏
  • 没有实现题目要求的「数组长度小于1时返回false」的逻辑
修正后代码

按照题目要求拆分两个文件:

function-3-1.cpp

#include <iostream>
using namespace std;

int* readNumbers()
{
    int* arr = new int[10];
    // 从下标0开始遍历,覆盖全部10个合法位置
    for (int i = 0; i < 10; i++) {
        cin >> arr[i];
    }
    // 直接返回内存起始地址,不修改指针本身
    return arr;
}

bool equalsArray(int* numbers1, int* numbers2, int length)
{
    // 长度小于1直接返回false,补全分支返回值解决编译报错
    if (length < 1) {
        return false;
    }
    // 逐位对比元素
    for (int i = 0; i < length; i++) {
        if (numbers1[i] != numbers2[i]) {
            return false;
        }
    }
    return true;
}

main-3-1.cpp

#include <iostream>
using namespace std;

// 声明外部定义的函数
int* readNumbers();
bool equalsArray(int* numbers1, int* numbers2, int length);

int main()
{
    int* arr1 = readNumbers();
    int* arr2 = readNumbers();
    bool result = equalsArray(arr1, arr2, 10);
    // 按要求格式输出结果
    cout << (result ? "True(1)" : "False(0)") << endl;
    // 释放堆内存
    delete[] arr1;
    delete[] arr2;
    return 0;
}
运行验证

输入题目给出的测试用例(连续输入1到10两次),程序会输出True(1),和期望结果一致。

内容的提问来源于stack exchange,提问作者Xu Shuo ze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.08 16:15:16