gpt4 book ai didi

c++ - 我在以下代码中收到总线错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:38 25 4
gpt4 key购买 nike

我的代码中出现总线错误。使用此代码,我试图将数字转换为单词,但我知道我的逻辑存在缺陷。但在此之前,当我在 Mac 上使用 g++ 编译并运行此代码时,我试图让这段代码按原样运行,但出现总线错误。任何帮助将不胜感激。

当我运行代码时,我得到以下输出。我有调试消息来跟踪错误发生的位置。

    Enter a number:1234    main 1:numbers are:234    Function1: Number is 234    two    two hundred    34Function2: Number is 34    Function3: Number is 34    Bus error: 10

#include <iostream>
#include <string>

using namespace std;
char *convert_number(int);

char *tens[] = {"", "ten", "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"};

char *words[] = {"zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen", "ninteen"};

char *place[] = {"", "hundred", "thouands", "million", "billion", "trillion"};


int main(int argc, char **argv)
{
int number, conv_num, places;
places = 1;
char *string = new char[1000];
char *temp_string = new char[100];
cout << "Enter a number:";
cin >> number;
string = " ";
if (number >= 1000)
{
while(number >= 1)
{
conv_num = number % 1000;
cout << "main 1:numbers are:" << conv_num << endl;
temp_string = convert_number(conv_num);
string =strcat(string, temp_string);
string =strcat(string, " ");
number = 0; // (number-conv_num)/1000;
cout << "main 2:numbers are:" << endl;
//cout << conv_num << ":" << number << endl;
}
}
else
{
string = convert_number(number);
string = strcat(string, " ");
}
cout<<"Main: The word is :"<<string<<endl;
}

char *convert_number(int number)
{
int divisor;
char *word;
word = new char[100];
divisor = 10;
cout << "Function1: Number is " << number << endl;

if (number >= 100)
{
word = strcat(word, words[number/100]);
cout << word << endl;
word = strcat(word, " hundred ");
cout << word << endl;
number = number%100;
cout << number;
}
cout << "Function2: Number is " << number << endl;

if (number >= 20)
{
word = strcat(word, tens[number/10]);
word = strcat(word, " ");
if (number%divisor >= 1)
{
word=strcat(word, words[number%divisor]);
word =strcat(word, " ");
}
}
cout << "Function3: Number is " << number << endl;

if (number < 20)
{
word = strcat(word, words[number]);
word = strcat(word, " ");
}
cout << "Returning word:" << word;
return word;
}

最佳答案

你得到总线错误的原因是因为你正试图写入不可写区域(即写入字符常量,也超过它的末尾);这是未定义的行为。

// Good: allocate 100 bytes to string 
char *string = new char[100];

// Bad! Compiler warns you that assigning character const to char* is wrong.
// It does not tell you that you've just leaked the 100 bytes that you allocated
/// before, but that's also true.
string=" ";

// ... some more code, and then
string = strcat(string,temp_string); // <<== HERE is the problem!

strcat 的调用尝试写入 string 的终止零,然后继续写入超过字符串常量的末尾。这是未定义的行为,因此您的程序会崩溃。

要解决此问题,您需要将"" 复制到string 中,而不是将其分配给string 指针。

关于c++ - 我在以下代码中收到总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10729906/

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