c++ - malloc/new 在函数指针内失败

标签 c++ function pointers struct

我有以下结构定义:

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/

相关文章:

c++ - 按值传递参数的性能

C++ 流问题(代码中注释的解释)

javascript - onclick() 具有多个功能,仅执行第一个

javascript - 使函数能够采用不同的参数集

C 指针和 var 作用域

C++ 默认构造函数不初始化指向 nullptr 的指针?

c++ - 带有 C++ 编译器包的 Eclipse

ios - Swift - 等到函数完成

c - 查找指向字符数组的指针的索引

c - 撤消功能在达到游戏初始状态后无法正常工作