none
奇怪的内存问题 RRS feed

  • 问题

  • //获取当前路径下的DLL文件路径 char *se=(char *)malloc(MAX_PATH); se=GetExecuteDirtory(); strcat(se,"\\sample.dll"); //此处可以得到类似 D:\test\sample.dll 这样的路径 //获取临时文件路径 TCHAR szTempPath[MAX_PATH]; memset(szTempPath,0,MAX_PATH); GetTempPath(MAX_PATH,szTempPath); [color=#FF0000]/运行到这里之后se的值丢失了,不知道为什么么[/color]
    2012年8月1日 2:22

答案

  • se=GetExecuteDirtory();

    这代码有问题, 如果GetExecuteDirtory();是返回一个路径的字符串,那么你应该将这个字符串copy到se这个buf中, 而不是直接赋值.

    2012年8月1日 6:08
  • char
    *se=(char
    *)malloc(MAX_PATH); se=GetExecuteDirtory(); strcat(se,"\\sample.dll");

    ----------------------------------
    同意Jack.arain。
    这里错了,您修改了指针的地址值,您原来malloc分配的内存就丢了,有内存泄露的问题。


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年8月1日 13:25
    版主
  • char *se=(char *)malloc(MAX_PATH); se=GetExecuteDirtory(); strcat(se,"\\sample.dll");

    您好,

    我完全同意Jack.arainVisualEleven的建议。第二行对指针se做了赋值,se已经不再指向之前申请的内存块,这将导致内存泄漏。

    并且strcat函数char* strcat(char *strDestination, const char *strSource)要求strDestination有足够的空间来容纳strSource的内容,所以第三句代码将造成缓冲区的溢出。

    可以修改为这样:

    char* se = (char*) malloc(MAX_PATH);
    strcpy(se, GetExecuteDirtory());
    strcat(se, "\\sample.dll");

    别忘了在se使用完毕之后free操作。



    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月7日 8:57
    版主

全部回复

  • se=GetExecuteDirtory();

    这代码有问题, 如果GetExecuteDirtory();是返回一个路径的字符串,那么你应该将这个字符串copy到se这个buf中, 而不是直接赋值.

    2012年8月1日 6:08
  • char
    *se=(char
    *)malloc(MAX_PATH); se=GetExecuteDirtory(); strcat(se,"\\sample.dll");

    ----------------------------------
    同意Jack.arain。
    这里错了,您修改了指针的地址值,您原来malloc分配的内存就丢了,有内存泄露的问题。


    Visual C++ enthusiast, like network programming and driver development. At present is being engaged in the WinCE/Windows Mobile platform embedded development.

    2012年8月1日 13:25
    版主
  • char *se=(char *)malloc(MAX_PATH); se=GetExecuteDirtory(); strcat(se,"\\sample.dll");

    您好,

    我完全同意Jack.arainVisualEleven的建议。第二行对指针se做了赋值,se已经不再指向之前申请的内存块,这将导致内存泄漏。

    并且strcat函数char* strcat(char *strDestination, const char *strSource)要求strDestination有足够的空间来容纳strSource的内容,所以第三句代码将造成缓冲区的溢出。

    可以修改为这样:

    char* se = (char*) malloc(MAX_PATH);
    strcpy(se, GetExecuteDirtory());
    strcat(se, "\\sample.dll");

    别忘了在se使用完毕之后free操作。



    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年8月7日 8:57
    版主