下面一段代码在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);
请教一下这是为什么?
关于在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。