A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 罗冠坤 中级黑马   /  2014-3-24 23:15  /  1171 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 罗冠坤 于 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

不知道哪里写错了,错误的意思好像是在释放动态分配内存时出错。但是没有看出来哪里错了。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览
本帖最后由 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. }
复制代码


回复 使用道具 举报
free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功.你这里将number的地址赋值给pnumber。pnumber不再指向由malloc分配的空间。因此free失败。

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报
conpgy 发表于 2014-3-25 09:47
free()只用于释放动态分配的空间,即malloc()/calloc()/realloc()函数分配的空间,否则不会成功.你这里将numb ...

恩恩,明白了。。感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马