gpt4 book ai didi

c - 当您在 main 中动态分配内存时,如何处理函数中的 assert()?

转载 作者:太空宇宙 更新时间:2023-11-04 05:49:05 25 4
gpt4 key购买 nike

我有以下 C 函数:

void mySwap(void * p1, void * p2, int elementSize)
{
void * temp = (void*) malloc(elementSize);
assert(temp != NULL);
memcpy(temp, p1, elementSize);
memcpy(p1, p2, elementSize);
memcpy(p2, temp, elementSize);
free(temp);
}

我想在通用排序函数中使用。假设我用它对 main() 拥有的动态分配的数组进行排序。现在让我们假设在某个时候 mySwap() 中的 temp 实际上是 NULL,并且整个程序在没有释放 main() 中动态分配的数组的情况下中止。我认为 mySwap() 和排序函数都可以返回一个 bool 值,指示分配是否成功,并且通过使用 if 语句我可以在 main() 和 exit(EXIT_FAILURE) 中释放数组,但它似乎没有就像一个非常优雅的解决方案。在这种情况下防止内存泄漏的好方法是什么?

最佳答案

assert 通常在调试期间用于识别不应发生的问题/错误。

内存不足是可能发生的事情,因此不应该由 assert 处理,或者,如果您确实使用 assert,请注意它会中止程序。一旦程序中止,程序使用的所有内存都将被释放,所以不用担心。

注意:如果您不想到处使用笨拙的 if 语句来处理几乎不会发生的错误,您可以使用 setjmp/longjmp 返回到一个可恢复状态。

关于c - 当您在 main 中动态分配内存时,如何处理函数中的 assert()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49050869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com