黑马程序员技术交流社区

标题: 报这个错是为什么呢? [打印本页]

作者: 罗冠坤    时间: 2014-3-24 23:15
标题: 报这个错是为什么呢?
本帖最后由 罗冠坤 于 2014-3-25 12:44 编辑
  1. int main(void) {

  2.     int *pnumber = malloc(100);
  3.    
  4.     if (!pnumber) {
  5.         printf("动态分配内存失败");
  6.         return 1;
  7.     }
  8.    
  9.     int number = 10;
  10.    
  11.     pnumber = &number;
  12.    
  13.     printf("%d\n",++*pnumber);
  14.    
  15.     free(pnumber);
  16.     pnumber = NULL;
  17.    
  18.     return 0;
  19. }
复制代码

上面的代码报错:
*** error for object 0x7fff54d80bcc: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

不知道哪里写错了,错误的意思好像是在释放动态分配内存时出错。但是没有看出来哪里错了。
作者: Er01c    时间: 2014-3-25 09:08
本帖最后由 Er01c 于 2014-3-25 09:09 编辑
  1. # include <stdio.h>
  2. # include <malloc.h>        
  3. int main(void) {

  4.     int *pnumber = (int *)malloc(100);
  5.    
  6.     if (!pnumber) {
  7.         printf("动态分配内存失败");
  8.         return 1;
  9.     }
  10.    
  11.     int number = 10;
  12.    
  13.     pnumber = &number;
  14.    
  15.     printf("%d\n",++*pnumber);
  16.    
  17.     free(pnumber);
  18.     pnumber = NULL;
  19.    
  20.     return 0;
  21. }
复制代码



作者: conpgy    时间: 2014-3-25 09:47
free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功.你这里将number的地址赋值给pnumber。pnumber不再指向由malloc分配的空间。因此free失败。
作者: 罗冠坤    时间: 2014-3-25 12:40
conpgy 发表于 2014-3-25 09:47
free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功.你这里将numb ...

恩恩,明白了。。感谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2