小编use*_*639的帖子

函数体在堆上

程序由三部分组成:文本、数据和堆栈。函数体位于文本部分。我们可以让函数体存在于堆上吗?因为我们可以更自由地操作堆上的内存,所以我们可能会获得更多的自由来操作函数。

在下面的 C 代码中,我将 hello 函数的文本复制到堆上,然后将函数指针指向它。该程序可以通过 gcc 编译良好,但在运行时会出现“分段错误”。

你能告诉我为什么吗?如果我的程序无法修复,您能否提供一种让函数驻留在堆上的方法?谢谢!

图灵机器人

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

void
hello()
{
    printf( "Hello World!\n");
}

int main(void)
{
    void (*fp)();

    int size = 10000;     //  large enough to contain hello()
    char* buffer;
    buffer = (char*) malloc ( size );
    memcpy( buffer,(char*)hello,size );
    fp = buffer;
    fp();
    free (buffer);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c memory heap-memory

4
推荐指数
1
解决办法
2459
查看次数

标签 统计

c ×1

heap-memory ×1

memory ×1