- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 C
中,当我们使用 malloc
系列函数时,我们应该添加一个条件来检查分配是否成功,如果没有,则打印一条消息。
如果我的代码中有很多分配,我有什么理由不应该把它变成一个函数?即:
void nullcheck(void * x){
if (x == NULL){
printf("Memory allocation has failed");
exit(1);
}
}
并调用函数:
int * a = malloc(sizeof(int));
nullcheck(a);
它使代码更好更短,有什么理由不应该这样做吗?
最佳答案
is there any reason why it shouldn't be done?
如果您的应用程序能够在分配失败时立即退出,那么请务必将其设为一个函数,甚至将其合并到分配函数中。
如果您正在编写需要比这更好的代码(例如库),您不能这样做,因为在释放任何已成功分配的内容后通常必须返回错误代码。
在后一种情况下,模式如下所示:
p1 = malloc(…);
if (!p1) goto error;
p2 = malloc(…);
if (!p2) goto free1;
p3 = malloc(…);
if (!p3) goto free2;
…
free2:
free(p2);
free1:
free(p1);
error:
return -1;
关于c - 有什么理由不把 malloc 之后的空检查变成函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29501068/
您好,我希望我的下一个输出(在本例中就是字母)在上一个输出之后输出 8 个空格。这适用于第一个字符,但之后的 printf 语句不起作用。它在第一个 printf 语句之后立即打印,我试图将其设置为
我想知道制作 std::list<>::splice 背后的基本原理是什么使引用被拼接到新容器中的子序列的迭代器无效。这对我来说有点不合逻辑,尤其是考虑到标准 std::container::swap
谁能告诉我为什么我应该使用 Azure Function 输出绑定(bind)(例如 SendGrid 或 Twilio)而不是仅仅在我的 C# 函数中显式使用适当的 SDK(例如 Sendgrid
我们在当前项目中使用 React 和 TypeScript,我遇到了以下行为。 import React, { Component } from 'react'; 我将上面的行替换为下面的行,因为它似
我是一名优秀的程序员,十分优秀!