我在問自己爲什麼這段代碼在我沒有爲fptr分配內存時工作得很好。我期望它有一個未定義的行爲因爲沒有爲fptr分配內存或做memcpy?在不使用malloc分配內存的情況下執行memcpy
struct conf *pconf = NULL;
void (*fptr)(char *, struct conf **);
void *temp = dlsym(dlptr, "config_run_all");
memcpy(&fptr, &temp, sizeof fptr);
fptr("test.conf", &pconf);
我對這個問題感到困惑;你爲什麼說你沒有爲'fptr'分配內存?這是一個變量;它根據定義是一個存儲位置。 –
這是未定義的行爲,只是不是因爲你認爲它的原因。如果我沒有記錯,void指針可以大於函數指針,因此您可能不會將正確的位複製到'fptr'中。 –
@EricLippert不幸的是,使用POSIX函數'dlsym'要求您使用C標準未定義的行爲。但是,鑄造比「memcpy」更好。 – interjay