这段代码有两个问题:

  1. 在主函数中没有为指针变量 'nums' 分配内存空间,导致指针未初始化,调用该指针指向的内存地址是不安全的。

  2. 在函数 'func' 中,将 'num' 转换成数组存储时,存储的顺序是从高位到低位,但输出时却是从低位到高位,需要注意输出的顺序问题。

解决方案:

  1. 在主函数中使用 new 运算符为指针变量 'nums' 分配内存空间:
int* nums = new int[len];
  1. 在函数 'func' 中,将 'num' 转换成数组存储时,需要从低位到高位存储,并在输出时也从低位到高位输出:
void func(int num, int len, int* nums) {
    int i = 0;
    while (num > 0) {
        nums[i++] = num % 10;
        num /= 10;
    }
}

修改后的代码:

#include <iostream>
using namespace std;

void func(int num, int len, int* nums) {
    int i = 0;
    while (num > 0) {
        nums[i++] = num % 10;
        num /= 10;
    }
}

int main() {
    int a;
    cin >> a;
    int i = a, len = 0;
    while (i > 0) {
        i /= 10;
        len++;
    }
    int* nums = new int[len];
    func(a, len, nums);
    for (int i = 0; i < len; i++) {
        cout << nums[i] << ' ';
    }
    cout << endl;
    delete[] nums; // 释放内存
}

注意:

  • 在使用 new 分配内存空间后,需要使用 delete[] 释放内存空间,以避免内存泄漏。
  • 在进行数组操作时,需要特别注意数组的边界问题,避免访问超出数组范围的内存地址,导致程序崩溃。
C++ 代码分析:指针未初始化和数字反转顺序问题

原文地址: https://www.cveoy.top/t/topic/owLS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录