C:向下传递指针,无法从调用函数访问更新的指针!

时间:2010-10-07 04:53:02

标签: c pointers

我遇到了问题 - 我将指针变量分配给被调用函数中的某些内容,但是当尝试访问调用函数中的更新指针时,它不会显示为已更新,并导致seg错误。救命啊!

“最底层的功能”:

void compareStrings(char* firstFrag, char* secondFrag, int* longestCommonLength, char* suffix, char* prefix, int* relative_pos) {
    suffix = firstFrag;
    prefix = secondFrag;
}

从此函数调用(printf触发故障)

int findBestOverlap(char* fragmentArray[], int fragmentCount, int* longestCommonLength, char* suffix, char* prefix, int* relative_pos) {
    compareStrings(fragmentArray[firstFrag], fragmentArray[secondFrag], longestCommonLength, suffix, prefix, relative_pos);
    printf("LCL: %i || PREFIX: %s || SUFFIX: %s", *longestCommonLength, prefix, suffix);
}

变量前缀和后缀在更高的调用函数processStrings中被创建。

void processStrings(char* fragmentArray[], int fragmentCount) {
    int longestCommonLength = 0;
    char* suffix;
    char* prefix;
    int relative_pos;  // Where the first letter of suffix is, vis-a-vis prefix

    if ((findBestOverlap(fragmentArray, fragmentCount, &longestCommonLength, suffix, prefix, &relative_pos)) != 0) {
    }
}

帮助!

2 个答案:

答案 0 :(得分:3)

您没有更新指针,只是更改参数的本地值。您需要使用指针指针(例如char**)并改变指向的值。

void compareStrings(char* firstFrag, char* secondFrag, int* longestCommonLength, char** suffix, char** prefix, int* relative_pos) {
    *suffix = firstFrag;
    *prefix = secondFrag;
}

然后你需要在调用者中适当地取消引用它。玩得开心!

答案 1 :(得分:0)

如果您需要此功能,您可以将指针传递给调用者的指针副本(因此被调用的函数可以使用它来回写它)或者您只需返回一个指针,调用者应该存储该指针并使用。