猿问

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

代码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为命名的吗?不会命名冲突吗?


初学程序小白,望大神搭救!!

农民爸爸
浏览 2344回答 3
3回答

Shanhui

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

慕粉3754631

 使用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型的单位字节数?恐怕这不能这样测量吧!!!???希望大神解答

农民爸爸

这个问题是,前几天学习链表的创建,所疑惑的地方.现在我有答案了循环创建动态内存,如上边代码 int * i.i 的地址是不会变的,但i里边保存即是指向的地址是每次循环就变动一次.创建出来不知名的动态内存,没有被释放,系统还是把那些内存分配给了该程序.但程序员已经找不到了.
随时随地看视频慕课网APP
我要回答