当我尝试对我的校验和功能进行测试时,我不断遇到分段错误。
int cksum(int *buf, int count) {
long sum = 0;
//if(count%2 == 1) { //if we are passing an odd number of bytes
// buf = strncat (*buf, '\0', 1);
//}
while (count) {
sum += *buf++;
if (sum & 0xFFFF0000) { /* carry occurred, so wrap around */
sum &= 0xFFFF;
sum++;
}
count--;
}
return ~(sum & 0xFFFF);
}
测试功能:
char poo[6] = {'c', 'b', '1', '3' , '4', 'a'};
int my_check_value = cksum(poo, 6);
我收到错误:分段错误(核心转储)
我真的不确定函数在哪里出错了,因为我非常简单地实现了它。谢谢!
答案 0 :(得分:2)
问题是int
和char
之间的大小差异。
你将一个大小为6字节的内存块传递给函数,因为每个char只有1个字节。但是该函数期望将内存分组为int
,这是4个字节,并且您告诉函数其中有6个,这意味着总共24个字节。
您希望如何继续进行取决于您,但您的当前使用情况中的功能应该采用char *
代替int *
似乎合乎逻辑?
答案 1 :(得分:1)
conda
正在指向int cksum(int *buf, int count)
作为参数。电话
int
正在传递int my_check_value = cksum(poo, 6);
数组。
答案 2 :(得分:1)
你正在将char poo[6]
作为int *buf
传递,这会破坏你所有的指针算术。将poo更改为int,或将buf指定为char *