【发布时间】:2013-08-05 17:34:48
【问题描述】:
我有一个名为 testdynamic 的函数,它使用 dlopen 和 dlsym 动态调用。现在,我创建了一个结构:
typedef struct BigStruct{
char el[2000];
}BigStruct;
用于存储函数的参数。然后,我将空间分配给一个名为:
void *cur = (void*)malloc(totalSize);
其中,totalSize 是参数的大小。我事先有这个信息。
之后,我将所有参数复制到 cur。
然后,我将它转换为 BigStruct,如下所示:
BigStruct *bg;
bg = (BigStruct*)cur;
然后像这样运行它:
void* ch = (void*)testdynamic(*bg);
现在,当我打印参数时,在函数 testdynamic 中,我得到了所有数据类型的正确值,例如 char**、int*、int 等。
唯一不起作用的数据类型是 char*。即使在使用*bg 调用函数之前,bg->el 的内容对于 char* 也是正确的。但是,调用后,出现错误。
可能是什么问题?
这里是testdynamic的代码
char* testdynamic(char* x, char* y){
printf("%s %s\n", x, y);
return "hello";
}
我想从我的代码中将参数传递给函数 testdynamic。
这个 testdynamic 可以是可以接受任何类型的任何参数的任何函数。
我在运行时获得有关该函数的信息。由于 char* 的大小为 1,我将所有内容都转换为 char*,然后将其传递给函数。
此时,如果我在 testdynamic 中打印 char* 类型的任何内容,我会收到运行时错误。
【问题讨论】:
-
请提供更多信息!
-
还需要什么信息?我将编辑我的问题。
-
你得到什么样的错误?您是否尝试过在调试器下运行代码?您的“打印参数”如何?
testdynamic的声明是什么样的?你如何在其中填充论点?为什么要将堆栈上BigStruct的COPY 传递给testdynamic?您如何在testdynamic中“消除”参数?你怎么处理这些论点?等等。 -
您不需要强制转换,因为与
void *之间的所有转换都会自动转换为适当的类型。 -
1) 给出失败输出的示例。 2)由于*bg在
testdynamic(*bg)之前好,之后不好,请提供testdynamic()代码。
标签: c gcc runtime-error