指针和malloc ....错误的代码片段

时间:2013-11-08 10:46:46

标签: c

#include <stdio.h>
#include <stdlib.h>

int main()
{ 
    int *ptr = NULL;
    ptr = (int*)malloc(2*sizeof(int*));//memory allocation dynamically
    return 0;
}// What is the error in this type of allocation

3 个答案:

答案 0 :(得分:2)

我想你想要为2个整数分配空间(而不是指向int的2个指针):

int *ptr = malloc(2*sizeof(int));//memory allocation dynamically

答案 1 :(得分:1)

如果你仔细阅读了编译错误,你会明白的。

int *ptr = NULL;
ptr = (int*)malloc(2*sizeof(int*)); //wrong

上面的代码错了。它应该是:

ptr = malloc(2*sizeof(*ptr));

无需转换malloc的返回值。 void *将安全地投放。此外,如果需要修改ptr的数据类型,则使用sizeof(*ptr)更容易维护。

此外,当不再需要内存时,可以自由动态分配内存,否则会导致内存泄漏。

free(ptr);

答案 2 :(得分:0)

问题出在sizeof(int*)),它应该是sizeof(int))

动态分配要求您指出要分配的字节大小,因此在此示例中,您应该使用sizeof(int)