1

このコードを使用した lfind 呼び出しでセグメンテーション違反が発生しています。CVector は、elems という配列を持つ構造体です。CVectorCreate および CVectorAppend 関数が機能することは知っています。最初のブロックはテスト コードで、クラスの一部として提供され、変更することはできません。2 番目のブロックは、私が作成した関数呼び出しです。誰かが私の問題を特定するのを手伝ってくれますか? ありがとう!

 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);
  }
4

1 に答える 1

1

とは異なりbsearch、への3番目の引数lfindはポインタです。

 size_t nmemb = cv->logicalLength;
 found = lfind(key, (char *)(cv->elems) + (startIndex * cv->elemSize),
               &nmemb, cv->elemSize, cmpfn);
于 2012-07-18T20:56:28.503 に答える