为了账号安全,请及时绑定邮箱和手机立即绑定

C语言 关于malloc分配内存问题.

C语言 关于malloc分配内存问题.

农民爸爸 2016-04-17 12:56:09
代码1:为什么可以通过for循环分配i的内存???#include<stdio.h> #include<malloc.h> #include<stdlib.h> int main() { int j; for (j=0; j<5; j++) { int * i = (int *)malloc(sizeof(int)); printf("内存地址:%d\n", i); } return 0; } /*输出结果: 内存地址:5312288 内存地址:5312320 内存地址:5312336 内存地址:5312352 内存地址:5312368 */代码2:为什么这样就提示错误??#include<stdio.h> #include<malloc.h> #include<stdlib.h> int main() { int * i = (int *)malloc(sizeof(int)); printf("内存地址:%d\n", i); int * i = (int *)malloc(sizeof(int)); printf("内存地址:%d\n", i); int * i = (int *)malloc(sizeof(int)); printf("内存地址:%d\n", i); return 0; } /*提示错误: a.c: In function 'main': a.c:10:8: error: redefinition of 'i' a.c:8:8: note: previous definition of 'i' was here a.c:12:8: error: redefinition of 'i' a.c:10:8: note: previous definition of 'i' was here */问题:问什么代码1可以重复分配i的内存而代码2不可以,分配出来5块内存都是以i为命名的吗?不会命名冲突吗?初学程序小白,望大神搭救!!
查看完整描述

3 回答

已采纳
?
Shanhui

TA贡献1条经验 获得超2个赞

代码1 中的i是局部变量,在for语句中每一次循环时重新创建和释放,  代码2中你重复使用了同一个变量,会报使用了已经定义的变量的错误

查看完整回答
2 反对 回复 2016-04-17
  • 农民爸爸
    农民爸爸
    1.malloc的内存之后没有free,是否每次重复定义i时,会被释放? 2.malloc内存如果没有释放,该内存空间,是否都还是以i来命名?
?
慕粉3754631

TA贡献1条经验 获得超0个赞

 使用malloce命令不是只需要在头文件加入    #include <stdlib.h>    吗?

怎么你的头文件确实却多了一个    #include<malloc.h>    ?    我不懂,望解答。

还有个问题我想问你:

void * malloc(unsigned int size)    这个命令,

为啥例子是这样写的: malloc(100);    分配100个字节

我又看到这样用的:(int *)malloc(5 * sizeof(int));    我知道sizeof(int)是测量本系统int型单位字节数,但我不明白为什么在前面要加个  *   号?这样有啥意义吗?

还有就是另一个命令void * calloc(unsigned n,unsigned size);  这个怎么用,比如我要开辟一个N个长度为size的连续空间,保存一个    char * 型的指针数组    那如何实现?我的想法是比如:
(char *)calloc(50,4);    开辟50个长度为4字节的连续空间

但我又怕会不会是这样:

(char *)calloc(50,4 * sizeof(char));    这样有问题吗?可以加    *    号吗?

可以sizeof(char)测量char型的单位字节数?恐怕这不能这样测量吧!!!???

希望大神解答



查看完整回答
反对 回复 2016-08-17
?
农民爸爸

TA贡献6条经验 获得超0个赞

这个问题是,前几天学习链表的创建,所疑惑的地方.

现在我有答案了

循环创建动态内存,如上边代码 int * i.

的地址是不会变的,但i里边保存即是指向的地址是每次循环就变动一次.

创建出来不知名的动态内存,没有被释放,系统还是把那些内存分配给了该程序.

但程序员已经找不到了.

查看完整回答
反对 回复 2016-04-24
  • 3 回答
  • 1 关注
  • 2343 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信