在C中重用内存

Pyr*_*ons 0 c memory pointers

我在使用和理解C中的free()函数时遇到了问题.

我尝试编写这个例子以继续重用指针,但我不明白为什么会出现错误:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>


typedef struct box
{
    char message[20];
}box;


box *newBox()
{
    box *inBox;
    inBox = (box *) malloc(sizeof(box));

    return inBox;
}


int main()
{
    box *temp = NULL;


    temp = newBox();
    strcpy(temp->message,  "Hello");
    printf("%s\n", temp->message);

    free(temp);

    strcpy(temp->message,  "World");
    printf("%s\n", temp->message);

    free(temp);

    strcpy(temp->message,  "People");
    printf("%s\n", temp->message);

    return 0;   

}
Run Code Online (Sandbox Code Playgroud)

输出是:

Hello
World
memory(531,0x7fff77e9e300) malloc: *** error for object 0x7fe8ba404a90: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6
Run Code Online (Sandbox Code Playgroud)

有解决方法吗?

Spi*_*rix 6

我不确定你为什么free(temp)在这里有两个:

temp = newBox();
strcpy(temp->message,  "Hello");
printf("%s\n", temp->message);

free(temp); /* ? */

strcpy(temp->message,  "World");
printf("%s\n", temp->message);

free(temp); /* ? */

strcpy(temp->message,  "People");
printf("%s\n", temp->message);
Run Code Online (Sandbox Code Playgroud)

该代码应该是

temp = newBox();
strcpy(temp->message,  "Hello");
printf("%s\n", temp->message);

strcpy(temp->message,  "World");
printf("%s\n", temp->message);

strcpy(temp->message,  "People");
printf("%s\n", temp->message);

free(temp); /* Free the allocated memory after use */
Run Code Online (Sandbox Code Playgroud)

一旦你free记忆了,你就不能使用它.所以free记忆在最后.


旁注:演员:

inBox = (box *) malloc(sizeof(box));
Run Code Online (Sandbox Code Playgroud)

不是必需的,这就是原因