我正在尝试将我的 C GNU/Linux 代码移植到 FreeBSD。起初我以为它不会编译和运行异常,但它并没有对我起作用,因为它没有使用其他操作系统不具备的功能。尽管它编译得很好(使用 没有错误或警告-Wall
),但应用程序在 GNU/Linux 安装上按预期正常工作的线路上保持段错误。
我正在做的是创建一个指向结构的指针,然后将指针作为 void 指针传递给函数,然后在函数内重新创建它。
前任:
typedef struct
{
int i;
}some_struct;
int main()
{
some_struct *test = malloc(sizeof(some_struct));
test->i = -1;
function(test);
return 0;
}
void *function(void *prarm)
{
some_struct test = *((some_struct *)param); //segfaults on this line.
free(param);
return NULL;
}
在我的 GNU/Linux 安装上,这将允许我在函数内部本地使用传递的指针数据重新创建结构,并允许我从中释放malloc
ed 内存,main()
但在 FreeBSD 上它会出现段错误,我不知道为什么。
如果我闯入function
并gdb
输入
p *(some_struct *)param
它成功地打印出我的命令结构,该结构是从函数内部的指针及其所有变量创建的。
我对为什么这在我的 FreeBSD 测试机器上运行 GNU/Linux 和段错误感到迷茫。
感谢您对我遇到的这个问题的任何帮助。