在c++中使用动态分配的问题
Problem with using dynamic allocation in c++
#include<iostream>
using namespace std;
int d(int num) {
int dn = num;
while (num != 0) {
dn += num % 10;
num = num / 10;
}
return dn;
}
int main() {
int* arr = new int[10000];
for (int i = 0; i < 10000; i++) {
arr[i] = i + 1;
}
for (int i = 0; i < 10000; i++) {
arr[d(i)] = 0;
}
for (int i = 0; i < 10000; i++) {
if (arr[i] > 0) {
cout << arr[i]-1<<endl;
}
}
delete[] arr;
return 0;
}
我绑定了D.R.Kaprekar的代码Self Number,但它在具有动态分配的控制台中没有显示任何结果,但在使用静态数组时显示了任何结果。
您在函数中遇到的问题
int d(int num) {
int dn = num;
while (num != 0) {
dn += num % 10;
num = num / 10;
}
return dn;
}
由于开始时dn=num,返回的walue不小于num。您不想在开始时将dn设置为零吗?
函数d
使用返回值
d(0) == 0
和
d(i) > i, for i != 0
这条线路
arr[d(i)] = 0;
导致未定义的行为,因为索引超出了界限。在这个代码示例中,您可以看到,尽管这个数组的大小是3
,但如何访问arr[4]
。
#include<iostream>
int d(int num) {
int dn = num;
while (num != 0) {
dn += num % 10;
num = num / 10;
}
return dn;
}
int main() {
constexpr unsigned int s = 3;
int arr[s];
for (unsigned int i = 0; i < s; i++) {
arr[i] = i + 1;
}
for (unsigned int i = 0; i < s; i++) {
arr[d(i)] = 0;
std::cout << "d(" << i << "): " << d(i) << 'n';
}
for (unsigned int i = 0; i < s; i++) {
if (arr[i] > 0) {
std::cout << arr[i] - 1 << 'n';
}
}
return 0;
}
输出:
d(0): 0
d(1): 2
d(2): 4
1
未定义的bevahior可以将自己表达为崩溃、看似正确的代码或其他任何东西。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 在c++中使用动态分配的问题
- 使用递归模板动态分配的多维数组
- 在C 中动态分配的内存的问题
- 复制到新阵列时出现动态内存分配问题
- 有关动态分配对象的问题
- 在打印出动态分配的数组中的前两个数字时遇到问题,其他数字工作正常
- 我在动态分配结构时遇到问题
- 复制构造动态分配对象的问题
- 可以将成员变量 (CBrush *) 分配给在类构造函数中动态分配的内存,并出现新的原因问题
- ***glibc检测到***和动态分配问题-C++
- 内存堆问题C++,具有动态分配多维数组的功能
- 动态分配结构数组:赋值问题(c++)
- c++动态内存分配问题
- c++删除动态分配内存的问题
- 在c++中使用动态分配的数组有什么问题?
- 类与虚拟函数的成员对象对齐和动态分配的问题
- 基本的c++动态分配问题
- 三维阵列动态分配问题