C lfind的分段错误?

C lfind的分段错误?,c,C,我在lfind调用中得到了一个分段错误。CVector是一个结构,带有一个名为elems的数组。我知道CVectorCreate和CVectorAppend函数可以工作。第一块是测试代码,它是作为类的一部分提供的,不能更改,第二块是我编写的函数调用。有人能帮我确定我的问题吗?谢谢 char *jumbled = "xatmpdvyhglzjrknicoqsbuewf"; CVector *cv = CVectorCreate(sizeof(char), 4, NULL); for (int

我在lfind调用中得到了一个分段错误。CVector是一个结构,带有一个名为elems的数组。我知道CVectorCreate和CVectorAppend函数可以工作。第一块是测试代码,它是作为类的一部分提供的,不能更改,第二块是我编写的函数调用。有人能帮我确定我的问题吗?谢谢

 char *jumbled = "xatmpdvyhglzjrknicoqsbuewf";
 CVector *cv = CVectorCreate(sizeof(char), 4, NULL);
 for (int i = 0; i < strlen(jumbled); i++)
    CVectorAppend(cv, &jumbled[i]);                      
 printf("\nDoing linear searches on unsorted cvector.\n");
 char ch = '*';
 Verify(0, CVectorSearch(cv, &jumbled[0], CmpCharElem, 0, false), "Linear search"); 




int CVectorSearch(const CVector *cv, const void *key, CVectorCmpElemFn cmpfn, int startIndex, bool isSorted)
{
  assert(startIndex >= 0 && startIndex <= cv->logicalLength);
  void *found = NULL;
  if (isSorted == true) {
    found = bsearch(key, (char *)(cv->elems) + (startIndex * cv->elemSize),
            cv->logicalLength, cv->elemSize, cmpfn);
  } else {
     found = lfind(key, (char *)(cv->elems) + (startIndex * cv->elemSize), cv->logicalLength, cv->elemSize, cmpfn);
  }
char*jumbled=“xatmpdvyhglzjrknicoqsbuewf”;
CVector*cv=CVectorCreate(sizeof(char),4,NULL);
for(int i=0;i=0&&startIndex logicalLength);
void*found=NULL;
如果(isSorted==true){
found=b搜索(键,(字符*)(cv->elems)+(startIndex*cv->elemSize),
cv->logicalLength,cv->elemSize,cmpfn);
}否则{
found=lfind(键,(字符*)(cv->elems)+(开始索引*cv->elemSize),cv->logicalLength,cv->elemSize,cmpfn);
}

b搜索
不同,
lfind
的第三个参数是指针

 size_t nmemb = cv->logicalLength;
 found = lfind(key, (char *)(cv->elems) + (startIndex * cv->elemSize),
               &nmemb, cv->elemSize, cmpfn);

bsearch
不同,
lfind
的第三个参数是指针

 size_t nmemb = cv->logicalLength;
 found = lfind(key, (char *)(cv->elems) + (startIndex * cv->elemSize),
               &nmemb, cv->elemSize, cmpfn);

&jumbled[0]
-只需传入
jumbled
,它已经是一个指针…
&jumbled[0]
-只需传入
jumbled
,它已经是一个指针了…可以删除segfault,非常感谢。如果您不介意相同的调用,另一个问题是:此时元素被分配为长度为32的数组,但有26个填充元素。Lfind似乎会自动尝试比较6个未初始化的值作为其搜索的一部分。我如何阻止它这样做?@JasonBlock:你不应该对
lfind
撒谎说数组中有多少个元素。如果你知道你总是有多余的元素,你可以将你想要找到的键写在第27位,这样
lfind
就可以找到它,即使它不在前26位。这很有效s至于删除segfault,非常感谢。如果您不介意的话,还有一个问题:elems此时被分配为长度为32的数组,但有26个填充元素。Lfind似乎也会自动尝试比较6个未初始化的值作为其搜索的一部分。我如何阻止它这样做?@JasonBlock:you sh不要谎称数组中有多少个元素。如果你知道你总是有多余的元素,你可以把你想找到的键写在第27位,这样
lfind
就能找到它,即使它不在前26位。