是否始终需要匹配malloc()和free()调用?我必须为结构分配动态内存,然后在一些操作后释放它。我可以覆盖动态内存中的数据,或者我应该先将它们释放出来并再次释放malloc吗?例如:
int x =5,len = 100;
do{
struct test *test_p = (struct test *) malloc(sizeof(struct test) + len);
/* ---do some operation ---------- */
free(test_p);
x--;
}while(x);
另一种方法是在循环之前执行malloc并在循环中执行free()。释放后我可以使用这个结构指针吗?例如:
int x =5, len = 100;
struct test *test_p = (struct test *) malloc(sizeof(struct test) + len);
do{
/* ---do some operation ---------- */
free(test_p);
x--;
}while(x);
提前感谢您的帮助和建议。
答案 0 :(得分:1)
假设这是使用灵活阵列方法并且您的分配有意义,您可以在每次迭代期间重用您的内存。这将为您节省大量的时间来分配和释放。
int x =5,len = 100;
struct test* test_p = malloc(sizeof *test_p + len);
do {
// do some operation using test_p
x--;
} while(x);
free(test_p);
如果要在每次迭代时“清除”结构,可以在循环开始时使用复合文字。
do {
*test_p = (struct test){0};
答案 1 :(得分:0)
当您不再需要对象时,释放对象始终是一个好习惯。在您的情况下,如果您在test
循环的每次迭代中使用while
结构,我会按如下方式编写代码:
int x =5,len = 100;
struct test *test_p = (struct test *) malloc(sizeof(struct test) + len);
do{
/* ---do some operation ---------- */
x--;
}while(x);
free(test_p);
答案 2 :(得分:0)
在您的代码中:
int x =5, len = 100;
struct test *test_p = (struct test *) malloc(sizeof(struct test) + len);
do{
/* ---do some operation ---------- */
free(test_p);
x--;
}while(x);
致电free(test_p);
后,您不应再次使用test_p
。这意味着test_p
仅在循环的第一个时间内有效。