我有以下结构定义:
struct info_link {
char url[100];
http_response *(*worker)(http_request *request, char *arguments);
long url_length;
};
如你所见,“worker”是一个函数指针。
现在,我有以下功能:
http_response *info_show_providers(http_request *request, char *arguments) {
char *test = new char[100];
long i = 5;
}
然后我定义了一个简单的 info_link 数组,其中包含 1 个成员,如下所示:
info_link internal_links[] = {
{"/show_providers", info_show_providers, 15}
};
我正在尝试调用:
internal_links[0].worker(x,x);
程序确实访问了“info_show_providers”函数,但每次我访问“new char[100]”函数时都失败了。
它抛出 SIGABRT。
会不会是我调用函数指针的方式不对?或者破坏堆栈?
应该如何正确完成?
最佳答案
如果堆已损坏,Glibc 的 malloc 可以引发 SIGABRT。我想到了两种情况:
1) 您正在使用信号处理程序(并且您不应该调用 malloc)。
2) 其他地方的内存损坏破坏了堆(例如:溢出/下溢是堆损坏的常见原因)。
关于c++ - malloc/new 在函数指针内失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17980890/