c语言malloc无法分配内存

我定义了一个结构体指针,想用malloc来动态的建一个数组,但是该语句执行完后,通过sizeof来查看该指针的大小只为4,我用其他的基本数据类型也试过,但结果都是4,无法得到想要的内存大小,是怎么回事?是头文件出问题还是编译器出问题了

动态分配的内存是不可以通过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(类型)*元素个数。

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-01
如果你用指针来申请内存空间,malloc(p),指针的类型要定义成结构数组的类型,
比如:struct stu *p;
ptr = malloc(p);

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

这样才能正常申请到空间。追问

请问如果我需要动态的定义一个数组,怎么可以通过这种方式实现,同时又能求出它的数组大小,我的机子通过sizeof(指针)/sizeof(类型)无法求出数组的大小

第2个回答  2015-07-01
.......指针在32位下就是4字节。你还不知道指针是什么。基础很差!

其实你是想看看到底有没有分配够这么多内存给你。其实只要判断指针 指针 != NULL 就可以了。因为只要分配成功就肯定一样大。分配失败时返回 NULL
相似回答