提问者:小点点

在V++中使用动态内存[重复]


这个代码正确吗?

int *set_new (int choice) {
   int *new_choice {new int};
   *new_choice = choice;
   return new_choice;
}

是否应该在返回值后删除,因为在内存堆上?

int *set_new (int choice) {
   int *new_choice {new int};
   *new_choice = choice;
   return new_choice;
   delete new_choice;
}

或者,我需要在函数调用完毕的地方删除它吗?如果不删除,会不会造成内存泄漏?

我在一个网站上了解到,如果在删除(删除)之后立即使用动态内存(新),那么就不会出现内存泄漏。

该函数在中调用:

int main () {
 int *b {new_choice (23)};
 printf ("% d", *b);
 delete b;
}

共2个答案

匿名用户

您不能删除将要使用的内容。分配给的指针将由的调用者使用,因此您不能释放它。

此外,您不能在返回后删除要返回的函数中的内容,因为意味着函数的执行将在此时结束,执行将返回给调用方。

int *set_new (int choice) {
   int *new_choice {new int};
   *new_choice = choice;
   return new_choice;
   delete new_choice; // this statement won't be reached
}

匿名用户

int *set_new (int choice) {
   int *new_choice {new int};
   *new_choice = choice;
   return new_choice;
   delete new_choice;
}

将永远不会执行行。函数以语句(以及其他语句)结尾。如果您试图移除之前的,它将被执行,但返回的指针将无效,因此没有意义。

您的最后一个示例是正确的,您应该在使用指向对象之后

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(v++|中|动态内存|重复)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?