我可以在一个循环中多次对同一个变量进行malloc吗?它会得到一个新的内存地址吗?
int* var;
int i;
for(i = 0; i < 5; i++)
{
var = (int*)malloc(sizeof(int));
}
这是否分配了一个新的空间,这不是我实际使用它的方式,我会在地址被重新分配到链表的情况下使用,这样它就可以被释放,不会导致内存地址。
是的,只要在重新分配之前对变量进行处理,这就可以了。"做点什么"的意思是:在重新分配指针之前先复制指针,然后再调用free。
我可以在一个循环中多次对同一个变量进行malloc吗?它会得到一个新的内存地址吗?
malloc
分配一个大小字节的内存块,并返回一个指向该块开头的指针。因此,在这个for
循环中:
for(i = 0; i < 5; i++)
{
var = (int*)malloc(sizeof(int));
}
在每次迭代中,malloc
都会分配一个新的内存块,并返回一个指向该块开头的指针,该指针将被分配给var
变量。但您在问题中提到了-">地址将被重新分配到链表中。"因此,假设您将分配的内存引用保留在某个位置。
这和这个一样好:
int somevalue;
for(i = 0; i < 5; i++)
{
somevalue = i+10; //Just assigning a value to variable
}
在每次迭代中,都会为somevalue
变量分配一个新值。循环结束后,变量somevalue
将具有在循环的最后一次迭代中分配的值。
这是否分配了一个新空间。。
是,只要malloc
成功。
附加说明:
不要强制转换malloc
返回。检查一下。
所以,你应该:
for(i = 0; i < 5; i++)
{
var = malloc(sizeof(int));
}