【发布时间】:2012-11-28 06:32:19
【问题描述】:
我正在尝试将我的 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 安装上,这将允许我在函数内部本地使用传递的指针数据重新创建结构,并允许我从 main() 释放 malloced 内存,但在 FreeBSD 上它会出现段错误,我会这样做不知道为什么。
如果我在gdb 中打断function 并输入
p *(some_struct *)param
它成功打印出我的命令结构,该结构是从函数内部的指针及其所有变量创建的。
我不知道为什么这是在我的 FreeBSD 测试机器上运行的 GNU/Linux 和段错误。
感谢您对我遇到的这个问题的任何帮助。
【问题讨论】:
-
发布 GCC(或 CLang?)标志也会有所帮助。
-
这不是真正的代码。问题出在您省略的其他部分。
-
此代码甚至无法编译,事实上,您引用的
gdbprint cmd 使用与您发布的代码完全不同的结构名称。请发布出现问题的真实代码。 -
@cnicutar:很抱歉没有发布实际代码。到目前为止,整个项目有 1300 行长,我不想用无用的代码淹没你们。我试图将我的代码最小化为我如何调用我的函数和函数本身。希望这可以帮助你们更好地帮助我。感谢收看。
-
@randynewfield,speedtest_cmd 是否在您的标题之一(或您遗漏的代码中)声明?如果不是,您应该尝试添加声明。您要构建什么架构?
标签: c linux segmentation-fault freebsd