#include <iostream>
using namespace std;
#include <memory>
#include <stdlib.h>
int add(int a, int b) {
return a + b;
}
/*
动态函数指针是指在运行时根据需要动态分配和修改的函数指针
它可以在程序运行时根据需要指向不同的函数,从而实现更加灵活
和动态的函数调用
在c++中,可以使用动态内存分配函数(如malloc或new)来创建
动态函数指针
*/
int test02() {
// 创建一个指向函数的指针
int(*pFunc)(int, int);
// 使用malloc动态分配内存
int size = sizeof(int(*)(int, int));
pFunc = (int(*)(int, int))malloc(size);
// 将函数指针指向 add函数
pFunc = add;
// 调用函数
int result = (*pFunc)(2, 3);
cout << result << endl; // 输出 5
// 释放内存
free(pFunc);
return 0;
}
int main() {
test02();
return 0;
}
free(pFunc)报错,请问该怎么解决呢?
D:\Work\c++\main.cpp:42:10: error: invalid conversion from 'int (*)(int, int)' to 'void*' [-fpermissive]
42 | free(pFunc);
| ^~~~~
| |
| int (*)(int, int)
In file included from D:/mingw64/include/c++/13.2.0/cstdlib:79,
from D:/mingw64/include/c++/13.2.0/ext/string_conversions.h:43,
from D:/mingw64/include/c++/13.2.0/bits/basic_string.h:4097,
from D:/mingw64/include/c++/13.2.0/string:54,
from D:/mingw64/include/c++/13.2.0/bits/locale_classes.h:40,
from D:/mingw64/include/c++/13.2.0/bits/ios_base.h:41,
from D:/mingw64/include/c++/13.2.0/ios:44,
from D:/mingw64/include/c++/13.2.0/ostream:40,
from D:/mingw64/include/c++/13.2.0/iostream:41,
from D:\Work\c++\main.cpp:1:
D:/mingw64/x86_64-w64-mingw32/include/stdlib.h:537:27: note: initializing argument 1 of 'void free(void*)'
537 | void __cdecl free(void *_Memory);
| ~~~~~~^~~~~~~
mingw32-make[2]: *** [CMakeFiles\app.dir\build.make:75: CMakeFiles/app.dir/main.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/app.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2
PS D:\Work\c++> cmake --build build
[ 50%] Building CXX object CMakeFiles/app.dir/main.cpp.obj
D:\Work\c++\main.cpp: In function 'int test02()':
D:\Work\c++\main.cpp:38:10: error: invalid conversion from 'int (*)(int, int)' to 'void*' [-fpermissive]
38 | free(pFunc);
| ^~~~~
| |
| int (*)(int, int)
In file included from D:/mingw64/include/c++/13.2.0/cstdlib:79,
from D:/mingw64/include/c++/13.2.0/ext/string_conversions.h:43,
from D:/mingw64/include/c++/13.2.0/bits/basic_string.h:4097,
from D:/mingw64/include/c++/13.2.0/string:54,
from D:/mingw64/include/c++/13.2.0/bits/locale_classes.h:40,
from D:/mingw64/include/c++/13.2.0/bits/ios_base.h:41,
from D:/mingw64/include/c++/13.2.0/ios:44,
from D:/mingw64/include/c++/13.2.0/ostream:40,
from D:/mingw64/include/c++/13.2.0/iostream:41,
from D:\Work\c++\main.cpp:1:
D:/mingw64/x86_64-w64-mingw32/include/stdlib.h:537:27: note: initializing argument 1 of 'void free(void*)'
537 | void __cdecl free(void *_Memory);
| ~~~~~~^~~~~~~
mingw32-make[2]: *** [CMakeFiles\app.dir\build.make:75: CMakeFiles/app.dir/main.cpp.obj] Error 1
mingw32-make[1]: *** [CMakeFiles\Makefile2:82: CMakeFiles/app.dir/all] Error 2
mingw32-make: *** [Makefile:90: all] Error 2
PS D:\Work\c++>