有人å¯ä»¥è§£é‡Šæˆ‘在这里å‘生了什么使用malloc指针

时间:2013-02-26 07:01:27

标签: c pointers malloc

#include<stdio.h>
int main(){
    int * ptr=(int *)malloc(40);
    printf("%d",sizeof(ptr));
}

当我è¿è¡Œæ—¶ï¼Œè¾“出结果为8 ......这里å‘生了什么...为什么输出8?

5 个答案:

答案 0 :(得分:2)

sizeofè¿ç®—符是一个编译时è¿ç®—符,任何指针的大å°éƒ½æ˜¯ä½ æœºå™¨ä¸Šçš„8个字节。

无法检索malloc内存区域的动æ€å¤§å°ã€‚你必须知é“它,或者把它ä¿å­˜åœ¨æŸä¸ªåœ°æ–¹ã€‚

您å¯ä»¥è€ƒè™‘使用Boehm's conservative garbage collector,然åŽæ‹¨æ‰“GC_malloc而ä¸æ˜¯malloc,您无需致电free(或GC_free) ,您å¯ä»¥ä½¿ç”¨GC_size(p)æ¥èŽ·å–以GC_malloc开头的p内存区域的大致大å°ï¼ˆä½†æˆ‘ä¸å»ºè®®ä½¿ç”¨GC_size)。< / p>

如果在Linux上使用malloc,请了解如何使用valgrindæ¥æœå¯»å†…存泄æ¼é”™è¯¯ï¼Œå¹¶ä½¿ç”¨gcc -Wall -g进行编译

答案 1 :(得分:2)

malloc()返回一个指å‘40字节内存(å¯èƒ½æ˜¯10个整数)的指针,并将其分é…ç»™ptr。 sizeof(ptr)为8的原因是因为您使用的是64ä½æœºå™¨ï¼ŒæŒ‡é’ˆçš„大å°ä¸º8个字节。

你应该在sizeof()中使用malloc()因为它是好的形å¼ï¼Œå¦‚果类型改å˜å¤§å°ï¼ˆè·¨è¶Šå¹³å°æˆ–其他),则é¿å…出现问题。如果你真的想è¦10个整数的空间,那么使用:

int *ptr = malloc(10 * sizeof *ptr);

这会分é…10个大å°ç±»åž‹ä¸ºptr的点,在本例中为int。这样åšçš„好处是您å¯ä»¥åœ¨ä¸æ›´æ”¹malloc()

的情况下更改类型

答案 2 :(得分:0)

å˜é‡ptr是指å‘int的指针,你的系统碰巧有8字节的大å°ã€‚

答案 3 :(得分:0)

ptr是一个指针。打å°ç³»ç»Ÿä¸ŠæŒ‡é’ˆçš„大å°ã€‚ 当pträ¿å­˜ä¸€ä¸ªåœ°å€æ—¶ï¼Œ8字节是在64ä½æœºå™¨ä¸Šä¿å­˜åœ°å€æ‰€éœ€çš„大å°ã€‚ 这是特定于编译器的。您无法检索分é…给指针的大å°ã€‚

如果你有这个疑问,那么你也应该怀疑free()如何在ä¸çŸ¥é“分é…给指针的大å°çš„情况下释放内存。

答案 4 :(得分:0)

我在我的Windows 32bit机器上å°è¯•äº†è¿™ä¸ªï¼Œæˆ‘得到了ans 4字节,我认为ptr是一个指å‘int的指示,显示它显示相关