gpt4 book ai didi

c - 段错误(核心已转储)- C 不再出现段错误问题。现在我可以调试了。谢谢

转载 作者:行者123 更新时间:2023-11-30 20:59:59 24 4
gpt4 key购买 nike

代码编译良好。当我执行时,我只是收到消息(段错误(核心转储))。任何帮助将不胜感激!

程序应该更改输入参数的基数。例如./convert 10 2 5 6 7输入基数:10输出基数:2输入基数中的参数:5 6 7

我刚刚开始学习...您能提供的任何帮助都会很棒!谢谢!

已编辑:不再有段错误问题。谢谢。

#include <stdio.h>
#include <string.h>




int makeInt(char digits[]) {
int num = 0;
int i = 0;
while (digits[i] != '\0') {
num = num * 10 + (digits[i] - '0');
i++;
}
return num;
}


//converts from original base to base 10
int makeBase10(char digits[],int a) {
int num = 0;
int pow = 1;
int i = 0;
int x = 0;
int length = strlen(digits);
char k;
for (i = length -1; i > -1; i--){
k = digits[i];
if(k <= '9' && k >= '0'){
x = (int)k - '0';
}
else{
x = (int)k - 'a' + 10;

}
num = num + (x*pow);
pow = pow * a;

}
return num;
}
//changes number from base 10 to knew base
// and returns as string
char * toString(char str[], int num, int b) {

int i = 0;
char x;
int mod = 0;
while(0 < num){
mod = num % b;
if(mod < 10 && mod > -1){
x = (char)(num + '0');
}
else{
x = (char)(num - 10 + 'a');
}

str[i] =(int) x;
num = num/b;
}
str[i] = '\0';

int length = i + 1;
int j = 0;
char *reverse;
for(i = length -2; i >= 0; i--){

reverse[i] = str[j];
j++;
}
reverse[length-1] = '\0';
return reverse;
}



int main(int argc, char *argv[]) {
int i;
int num;
int a;
int b;
char str[33]; //binary could be up to 32 + '\0'
a = makeInt(argv[0]); //input base
b = makeInt(argv[1]);; //output base
printf("make int worked and input works");
num = 0;
i = 2;
while (i < argc) {
num = makeBase10(argv[i], a);
printf("%s\n", toString(str, num, b));
i++;
}


}

最佳答案

您正在使用未初始化的指针。

int length = i + 1;
int j = 0;
char *reverse; // here is the problem
for(i = length -2; i >= 0; i--){

reverse[i] = str[j];
j++;
}
reverse[length-1] = '\0';

当使用未初始化的指针时,您正在写入恰好存储在该变量中的任何内存地址。没有给出合理的值。因此,您正在写入一些不适合应用程序写入的内存位置。计算机内存是分段的。每个内存区域都有一个所有者,可以在那里写入。这是一种安全预防措施,可以防止错误造成系统困惑。您必须首先使用 malloc

进行初始化
char *reverse = malloc(length);

或者如果您在编译时知道可以执行的最大大小:

char reverse[MAX_SIZE];

附注为了反转,你不要遍历整个字符串,直到开始的一半。而不是 for(i = length -2; i >= 0; i--)
编写:for(i = length -2; i >= length/2;我--)

关于c - 段错误(核心已转储)- C 不再出现段错误问题。现在我可以调试了。谢谢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43772935/

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