C++ 代码分析:指针未初始化和数字反转顺序问题
这段代码有两个问题:
-
在主函数中没有为指针变量 'nums' 分配内存空间,导致指针未初始化,调用该指针指向的内存地址是不安全的。
-
在函数 'func' 中,将 'num' 转换成数组存储时,存储的顺序是从高位到低位,但输出时却是从低位到高位,需要注意输出的顺序问题。
解决方案:
- 在主函数中使用
new运算符为指针变量 'nums' 分配内存空间:
int* nums = new int[len];
- 在函数 '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[]释放内存空间,以避免内存泄漏。 - 在进行数组操作时,需要特别注意数组的边界问题,避免访问超出数组范围的内存地址,导致程序崩溃。
原文地址: https://www.cveoy.top/t/topic/owLS 著作权归作者所有。请勿转载和采集!