2

我有以下结构定义:

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。

难道是我调用函数指针的方式不对吗?或者破坏堆栈?
应该如何正确完成?

4

1 回答 1

1

如果堆损坏,Glibc 的 malloc 可以引发 SIGABRT。两个场景浮现在脑海:

1)您正在使用信号处理程序(并且您不应该调用 malloc)。

2)您在其他地方有内存损坏破坏了您的堆(例如:溢出/下溢是堆损坏的常见原因)。

于 2013-07-31T21:21:31.650 回答