关于在C语言中使用free()的问题?

下面一段代码在C++中运行会报错,
int* C_pt = (int*)malloc(4 * sizeof(int));
*C_pt = 1;
*(C_pt + sizeof(int)) = 2;
cout << *(C_pt) << endl;
free(C_pt);
但下面这段却不会报错:
int* C_pt = (int*)malloc(4 * sizeof(int));
*C_pt = 1;
cout << *(C_pt) << endl;
free(C_pt);
请教一下这是为什么?

这个错误虽然在free时报错,但是错误不是free导致的。
*(C_pt + sizeof(int)) = 2;
这里你在访问C_pt指向的内存的第5个int,而你只分配了4个int的内存,因此你的代码出现内存访问越界,当然有问题。这可能是你对C_pt+运算符的含义理解错误导致的。

底下的没有越界,当然没问题
温馨提示:内容为网友见解,仅供参考
第1个回答  2021-03-04
没有。不能用一个简单的指针释放自由。你会看到 bmp 文件的结构,看到很多程序的结构,它们的结构会被存储在数据的大小中,因为数据流的表面,所以大小通常放在开头。类似地,malloc (10)实际上必须大于10,它在内部存储开放内存大小的数据,然后确定要释放的字节。看到 p-2的价值了吗?它是14:10字节的 malloc 4字节是一个大小数据单元。自由基于这个数字知道到底释放了多少。

关于在C语言中使用free()的问题?
这个错误虽然在free时报错,但是错误不是free导致的。(C_pt + sizeof(int)) = 2;这里你在访问C_pt指向的内存的第5个int,而你只分配了4个int的内存,因此你的代码出现内存访问越界,当然有问题。这可能是你对C_pt+运算符的含义理解错误导致的。底下的没有越界,当然没问题 ...

在c语言中有关free的用法错误,求指点。
free只能释放堆里内存.

c语言 free的疑问
1.如果你只在main函数或者一个子函数里使用,那就在main函数或者子函数的结尾进行free;2.如果你在子函数里用了malloc,并返回了这个指针,那么就要在调用这个子函数的函数里,那块区域不再用了再free

c语言的小问题,可否这样free
在 C 语言中,free( ) 是释放内存的库函数,它的函数原型在 stdlib.h 头文件中有定义。另外,为指针变量分配内存的库函数有:malloc( )、calloc( )、realloc( )。但是记住一点就是,为某个指针变量分配了一个内存的同时,必须要判断该内存分配是否成功。即:如果返回空指针 NULL,那么内存分配失败...

关于C语言中free函数的问题
要free的话首先那块空间得是malloc, calloc, realloc...开辟出来的内存空间, free多少取决于当时alloc出多少.char* a = (char*)malloc(x*y*sizeof(char));\/\/开辟了x*y个char的空间,(这里是二维的,如果多维就是要多少,开多少);\/\/相当于a[x][y];\/\/但是malloc出的空间是堆区的,而数组是在...

C语言:关于FREE()函数的用法
不可以的。malloc, alloc, free是c定义的一组内存管理的API函数,当你调用malloc、alloc分配内存时,不仅仅是从堆里面分配得到了可用内存,实际上内存管理子系统还会维护了内存列表。你自己定义的指针不会在这个列表中的,所以free会出问题的。那么,使用new, GlobalAlloc之类的方式分配的内存可不可以使用...

C语言free问题
这个程序流程就是从L->next开始逐个释放结点空间 p = L->next;\/\/把L->next赋给P while(p)\/\/当P不为空时循环 { q = p->next;\/\/将P->next赋给q free(p);\/\/释放P结点 p = q;\/\/将q即原来p->next赋给p }

关于C语言中free函数的使用
free(*add(a,b));显然是写错了,应该是free(add(a,b));才对。改后从原理到语法都是正确的,是完全合法有效的。但为了释放内存,要调用两次自定义函数add这种操作值得吗?回答肯定是否定的;再说调用两次自定义函数就进行了两次malloc操作,释放的只是第二次调用申请的内存,第一次调用时申请的内存...

用free函数需要注意什么
free(void *p)函数是用来释放程序动态申请的内存。其参数是个指针类型。在C当中,只有当使用了动态内存申请函数malloc calloc realloc申请内存之后,才可以使用free来释放之。释放之后就不能再使用了。在C++中,除了上述函数之外,还有new操作之后,都要使用free函数。切记,动态申请内存使用完后,一定要...

c语言free使用
是因为你的malloc用错了,分配少了内存。正确如下:include <stdio.h>#include <malloc.h>int main(void){int *p = (int *)malloc(sizeof(int));*p = 22;free(p);return 0;} int的大小通常是4,不是2。

相似回答