gpt4 book ai didi

将十进制转换为二进制的 C++ 程序出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 16:06:24 28 4
gpt4 key购买 nike

这是一个将十进制数转换为二进制数的c++程序。好吧,有很多可能的方法来实现这一点,但当我了解到静态变量时,我想利用它。所以程序是

#include <iostream>

using namespace std;

int **binary(int num, int &k) {
static int *p;
int i = 0;
while (num > 0) {
*p = num % 2;
p++;
num = num / 2;
k++;
}
return &p;
}

int main() {
int n;
int k = 0;
cout << "\n Enter the number to be converted into binary : ";
cin >> n;
int **ptr;
ptr = binary(n, k);
cout << "\n The number of bytes in the binary number is : " << k << endl;
cout << "\n The binary code is : \n";
for (int i = 0; i < k; i++)
cout << **(ptr+i);
return 0;
}

输出:

 Enter the number to be converted into binary : 33
Segmentation fault

调试此代码后,我在第 9:9 行遇到段错误即

*p = num % 2;

我不知道为什么这会导致我访问堆栈中未占用的内存空间。

最佳答案

出现崩溃的原因是p被初始化为nullptr。取消引用未初始化的变量是未定义的行为,因此会导致崩溃。

免责声明:以下代码旨在修复您的代码。它无意说明执行此操作的正确方法,或展示一般编码的好方法。

如果你想玩函数静态变量,并且你的函数必须返回一个指向指针的指针,通过将它指向另一个为你提供的static变量来初始化p带缓冲区:

static int pVal[100];
static int * p;
p = pVal; // This should be done in an assignment, not in initializer

注意:返回指向static 存储的指针会使您的代码不可重入,这通常是一种非常糟糕的做法。此代码作为学习练习很好,但不应在生产代码中使用。

关于将十进制转换为二进制的 C++ 程序出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34558632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com