dlopen failed!

I can open my so file successfully by calling dlopen directly in my main function. But if I fork a child process, and call dlopen in child process, it failed!
I don't know why. Following is my code:
#include <stdio.h>
#include <errno.h>
#include <dlfcn.h>
void childFunc(void)
{
void *handle;

handle = dlopen\("mytrd.so", RTLD_LAZY\);
if\( handle == NULL \)
\{
     printf\("errno[%d], errmsg[%s]\\n", errno, dlerror\(\)\);
     return;
\}
dlclose\(handle\);

}

void main(void)
{
int ret;
/* childFunc(); call directly, dlopen will success.*/

ret = fork\(\);
if\( ret == 0 \)
\{
     childFunc\(\); /* dlopen will fail */
     return;
\}
else if\( ret == -1 \)
\{
    perror\("fork"\);
    retrun;
\}
else
\{
    waitpid\(ret\);
\}

}

Can anyone tell me why this happened? Is that a bug of Aix5.2 or there is anything wrong with my so file??The errmsg is "Bad address", the errno is 14.

restart the computer, and problem solved!
I have no idea ...