当我调用数组来标记位于全局名称数组中的索引的无符号整型集[9]中相应位位置的位位置时,出现分段错误名称[320] [30]。当我运行该程序时,我使用./a.out < data.dat并在列表中加载一个320字的列表。没有超过30个字符。C - 分割错误将字符指针传递给函数
此外,typedef unsinged int Set[10];
这里就是我所说的addName2Set功能
//add name to unsigned int set
void addName2Set(Set set, char *key){
int index;
//binary search to get index for key
index = binarySearch(names, key, 0, 319);
//call add2set to add index to set
add2Set(set, index);
}
下面的代码是add2Set
//add value passed to set passed
void add2Set(Set set, int index){
int element, position;
//find which element, set[element] of set index is in
element = findArrayElement(index);
//convert index to bit position 0-31 in set[element]
position = findElementPos(element, index);
//in set[element], set bit position 'position' to 1
set[element] = set[element] | (1 << position);
}
这里是findArrayElement和findElementPos功能
//for unsigned int set[i], return i
int findArrayElement(int index){
//index range [j,i]
int i;
int j=0;
//element in set array
int element;
//loop through [j,i], return element if range true
for(i=31; i<320; i+=32){
if(i <= i && index >= j){
return element;
}
j+=32;
element++;
}
}
//find bit position 0-31 corresponding to index
int findElementPos(int element, int index){
int j;
int position;
j = element*32;
position = index - j + 1;
//return bit position
return position;
}
最后这里就是我所说的addName2Member功能
//declare key pointer
char *key = (char*)malloc(30);
//set search word to pointer key
strcpy(key, "clean");
//addName2Set
addName2Set(set1,key);
任何人都知道为什么会有分段错误,当我运行程序? “Clean”是data.dat列表中的第一个单词。
下面是从Valgrind的结果
== 1645尺寸的==无效读取4
== 1645 ==在0x8048860:add2Set(set.c:61)
== 1645 ==通过0x8048A5D:addName2Set(set.c:145)
== 1645 ==由0x80485D2:主(driver.c:29)
== 1645个==地址0x9DBED860不stack'd ,malloc'd或(近期)fre e'd
== 1645 ==
== 1645 ==过程与信号的默认动作11(SIGSEGV)
== 1645 == GPF终止(指针出界?)
== 1645 ==在0x8048860:add2Set(set.c:61)
== 1645 ==由0x8048A5D:addName2Set(set.c:145)
== 1645 ==通过0x80485D2 :main(driver.c:29)
您还需要提供'findArrayElement'和'binarySearch'的定义,或者如果它们不是您的函数,您需要提供哪些库/标题才能使用它们。 seg.fault最可能是由于元素超过了Set(10)的允许大小,但它的值来自上面提到的函数。另外,如果你可以添加变量'set1'的声明,那可能也会有帮助。 – Attila 2012-03-29 03:03:30
我已添加它们。 – manalishi 2012-03-29 03:04:14
它看起来像是在'findArrayElement'结尾缺少return语句。这可能是你的问题。如果不是,请更正问题中的代码。请同时提供'binarySearch'和'names'的定义(用于'addName2Set()' – Attila 2012-03-29 03:12:07