[英]I am getting a segmentation fault error on my C program
我在以下代碼塊之一中遇到分段錯誤,但我懷疑它是xbits.c:
#include <stdio.h>
#include <math.h>
void itox(int n, char hexstring[]);
int xtoi(char hexstring[]);
void itox(int n, char hexstring[]) {
hexstring[2*sizeof(n) + 1];
int ratio, remainder;
int i = 0;
while(ratio != 0)
{
ratio = n / 16;
remainder = n % 16;
if (remainder == 10){
hexstring[i] = 'A';
i++;
}
else if (remainder == 11){
hexstring[i] = 'B';
i++;
}
else if (remainder == 12){
hexstring[i] = 'C';
i++;
}
else if (remainder == 13){
hexstring[i] = 'D';
i++;
}
else if (remainder == 14){
hexstring[i] = 'E';
i++;
}
else if (remainder == 15){
hexstring[i] = 'F';
i++;
}
else
hexstring[i] = remainder;
}
i++;
hexstring[i] = '\0';
}
int xtoi(char hexstring[]) {
int i, integer;
int length = getLength(hexstring);
for (i = length-2 ; i >= 0 ; i--)
{
integer += (int) pow((float) hexstring[i] , (float) i);
}
return integer;
}
int getLength (char line[])
{
int i;
i=0;
while (line[i])
++i;
return i;
}
上面的代碼依賴於我尚未調試的主要方法showxbits.c,但是當我使用測試主要方法時,出現了段錯誤錯誤,而當我使用gdb時,出現了以下錯誤。
Program received signal SIGSEGV, Segmentation fault.
0x00000000004007ad in itox ()
這使我相信問題出在上述.c文件中的itox中。 該程序應該將int轉換為十六進制,然后將十六進制轉換回int。
您的代碼中有很多錯誤。 您可以通過編譯器警告來捕獲其中的一些。 不過,其中一些是邏輯錯誤。
ratio
未初始化,在while
條件中首次使用時將包含垃圾。 它可能應該初始化為n
。 while
循環條件將永遠不會改變(不考慮初始值),因為ratio
將始終為n / 16
並且n
不會改變。 您可能不需要ratio
,可以直接對n
進行操作。 當您說hexstring[i] = remainder
您不會按照自己的想法去做。 您想分配一個數字,但要分配一個字符,其ASCII碼為0到9,這些字符大多是不可打印的字符。 (零甚至終止字符串。)
hexstring[i] = '0' + remainder;
這里。 您可以對帶有'A'
字母執行相同'A'
。 請注意,對於數字,您不會增加i
,因此在循環的下一次迭代中將覆蓋數字。
孤行
hexstring[2 * sizeof(n) + 1];
什么也沒做 您必須在調用itox
的函數中分配足夠的內存。
pow
函數用於簡單的整數運算。 取而代之的是,遵循itox
的模式:將結果乘以16,然后加上下一個十六進制數字的值。 strlen
並將其稱為getLength
,但是請確保在調用它之前提供一個原型。 unsigned
,因為沒有負整數的十六進制表示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.