指针和malloc。。。。此代码段中有错误 #包括 #包括 int main() { int*ptr=NULL; ptr=(int*)malloc(2*sizeof(int*);//动态分配内存 返回0; }//这种类型的分配有什么错误
问题在于指针和malloc。。。。此代码段中有错误 #包括 #包括 int main() { int*ptr=NULL; ptr=(int*)malloc(2*sizeof(int*);//动态分配内存 返回0; }//这种类型的分配有什么错误,c,C,问题在于sizeof(int*)并且应该是sizeof(int)) 动态分配要求您告诉它要分配的字节大小,因此在本例中,您应该使用sizeof(int)我猜您希望为2个int分配空间(而不是指向int的2个指针): 如果仔细阅读编译错误,您就会明白这一点 int *ptr = malloc(2*sizeof(int));//memory allocation dynamically 上面的代码是错误的。应该是: int *ptr = NULL; ptr = (int*)malloc(2*siz
sizeof(int*)
并且应该是sizeof(int))
动态分配要求您告诉它要分配的字节大小,因此在本例中,您应该使用
sizeof(int)
我猜您希望为2个int分配空间(而不是指向int的2个指针):
如果仔细阅读编译错误,您就会明白这一点
int *ptr = malloc(2*sizeof(int));//memory allocation dynamically
上面的代码是错误的。应该是:
int *ptr = NULL;
ptr = (int*)malloc(2*sizeof(int*)); //wrong
无需强制转换malloc
的返回值<代码>无效*将安全浇铸。此外,如果需要修改ptr的数据类型,使用sizeof(*ptr)
更易于维护
另外,当不再需要动态分配的内存时,请释放该内存,否则将导致内存泄漏
ptr = malloc(2*sizeof(*ptr));
你确实做错了什么事——你根本不知道那是什么吗?(除了转换malloc的结果外,我还使用gcc进行编译,并使用*ptr=34;即使代码缺少严格性,
sizeof(*ptr)
也不会比sizeof(int)
更便于移植。与原始的sizeof(int*)
相比,这些都是正确的方法。假设我将int*ptr
更改为long*ptr
,我不需要对分配进行任何更改。如果我使用的是sizeof(int)
,则需要将其修改为sizeof(long)
。是的,这是正确的,但与代码的可移植性无关。(=当前代码是否在其他环境中运行而无需修改)是的,portable是错误的词。我应该使用易维护性:)
ptr = malloc(2*sizeof(*ptr));
free(ptr);