Memory 覆盖不同内存中的缓冲区。Free():无效指针错误

Memory 覆盖不同内存中的缓冲区。Free():无效指针错误,memory,stack,buffer,heap-memory,free,Memory,Stack,Buffer,Heap Memory,Free,我有一个使用read的函数。如我所知,read将文件中给定数量的字符保存在缓冲区中。所以我现在的问题是: char buff[BUFFER_SIZE + 1] 这是静态内存字符串空间,对吗?我可以复制一些字符串,然后覆盖这个字符串,这样就不会有任何内存问题了吗?在我看来,类似的事情如下: int x; x = 10; x = 20; 所以10被20覆盖,10不再存在。不需要像free这样的额外操作 后来我也试着用同样的方法 char *buff; buff = malloc(5); buf

我有一个使用read的函数。如我所知,read将文件中给定数量的字符保存在缓冲区中。所以我现在的问题是:

char buff[BUFFER_SIZE + 1]
这是静态内存字符串空间,对吗?我可以复制一些字符串,然后覆盖这个字符串,这样就不会有任何内存问题了吗?在我看来,类似的事情如下:

int x;

x = 10;
x = 20;
所以10被20覆盖,10不再存在。不需要像free这样的额外操作

后来我也试着用同样的方法

char *buff;
buff = malloc(5);
buff = "abcde";
printf("%s", buff);
buff = "efghi";
printf("%s", buff);
而且。。。它编译并分别打印abcde和efghi。所以这里发生的事情和我们在堆栈内存上的工作完全一样。但据我所知,此代码应如下所示:

char *buff;
buff = malloc(5);
buff = "abcde";
free(buff)
buff = malloc(5);
buff = "efghi";
但这给了我一个错误

free():无效指针 流产

有人知道会发生什么吗?这是一件很小的事情,我已经花了很多时间在这上面了