#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
答案 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)
。