我遇到了问题 - 我将指针变量分配给被调用函数中的某些内容,但是当尝试访问调用函数中的更新指针时,它不会显示为已更新,并导致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) {
}
}
帮助!
答案 0 :(得分:3)
您没有更新指针,只是更改参数的本地值。您需要使用指针指针(例如char**
)并改变指向的值。
void compareStrings(char* firstFrag, char* secondFrag, int* longestCommonLength, char** suffix, char** prefix, int* relative_pos) {
*suffix = firstFrag;
*prefix = secondFrag;
}
然后你需要在调用者中适当地取消引用它。玩得开心!
答案 1 :(得分:0)
如果您需要此功能,您可以将指针传递给调用者的指针副本(因此被调用的函数可以使用它来回写它)或者您只需返回一个指针,调用者应该存储该指针并使用。