为什么我的错误指针无效?

Chr*_*ian 0 c linux gcc

/* DECLARED FUNCTIONS */
char *DetectDevice(void);

int main(int argc, char *argv[])
{
    char *PathToDevice;
    PathToDevice = DetectDevice();

...

    if(close(fd) == -1)
    {
        printf("Error Closing Port");
    }else
    {
        printf("whihi!");
        free(PathToDevice);
    }

    return 0;
}

char *DetectDevice(void)
{   
    char *Usbs = malloc(1024);
    Usbs = "/dev/ttyUSB1";
    return Usbs;
}
Run Code Online (Sandbox Code Playgroud)

错误消息:*glibc检测到* ./test:free():无效指针:0xbec1b504

顺便说一下...这个程序是在覆盆子pi上编译的!

Gri*_*han 5

char *DetectDevice(void)
{   
    char *Usbs = malloc(1024);
    Usbs = "/dev/ttyUSB1";
    return Usbs;
}
Run Code Online (Sandbox Code Playgroud)

char *DetectDevice(void)您为 您返回的分配 "/dev/ttyUSB1"字符串地址Usbs.并尝试释放.Usbsmalloc 存储的地址被Usbs = "/dev/ttyUSB1";语句覆盖,Usbs具有该常量字符串的地址.
"/dev/ttyUSB1"是不是动态分配你错误地试图释放!

这样做.

char *DetectDevice(void)
    {   
        char *Usbs = malloc(1024);
        strcpy(Usbs,"/dev/ttyUSB1");
        return Usbs;
    } 
Run Code Online (Sandbox Code Playgroud)