c语言malloc无法分配内存

我定义了一个结构体指针,想用malloc来动态的建一个数组,但是该语句执行完后,通过sizeof来查看该指针的大小只为4,我用其他的基本数据类型也试过,但结果都是4,无法... 我定义了一个结构体指针,想用malloc来动态的建一个数组,但是该语句执行完后,通过sizeof来查看该指针的大小只为4,我用其他的基本数据类型也试过,但结果都是4,无法得到想要的内存大小,是怎么回事?是头文件出问题还是编译器出问题了 展开
 我来答
风若远去何人留
推荐于2018-04-07 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450118
专业C/C++软件开发

向TA提问 私信TA
展开全部
动态分配的内存是不可以通过sizeof来确定大小的。或者说 所有的指针类型都不可以。
sizeof的结果是指针本身的大小,对于32为编译器,都是4
只要你malloc的返回结果不是NULL,这个内存就可以放心的用了。
追问
我想动态的定义一个数组,先定义一个指针变量,在申请相应的内存,但是在操作时却无法像数组一样正常使用,请问如何可以做到动态的定义数组?char型的数组可以这样使用,但是其他类型的就无法使用了
追答

比如

int *p, i;
p = (int *)malloc(sizeof(int) * 100);
for(i = 0; i < 100; i ++)
    p[i] = i;

类似这样就Ok了

你定义的大小不对吧 注意要sizeof(类型)*元素个数。

bearlitao
2015-07-01 · TA获得超过245个赞
知道小有建树答主
回答量:111
采纳率:0%
帮助的人:66.1万
展开全部
如果你用指针来申请内存空间,malloc(p),指针的类型要定义成结构数组的类型,
比如:struct stu *p;
ptr = malloc(p);

如果你直接申请空间,malloc(100),malloc需要强制转换成你的结构类型。
比如:ptr = (struct stu *)malloc(100);

这样才能正常申请到空间。
追问
请问如果我需要动态的定义一个数组,怎么可以通过这种方式实现,同时又能求出它的数组大小,我的机子通过sizeof(指针)/sizeof(类型)无法求出数组的大小
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-01
展开全部
.......指针在32位下就是4字节。你还不知道指针是什么。基础很差!

其实你是想看看到底有没有分配够这么多内存给你。其实只要判断指针 指针 != NULL 就可以了。因为只要分配成功就肯定一样大。分配失败时返回 NULL
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式