我的C代码有一个简单的问题....我想通过引用调用来调用变量。
我有这个功能:
node-sass
我的主要电话:
yarn.lock
现在我遇到以下问题:“程序'[6044] My-C-Project.exe'已退出,代码为-1(0xffffffff)”,因此这意味着我的函数createHeader无法正常工作...可以有人请解释这是什么错误?
致谢
亚历克斯
答案 0 :(得分:0)
将功能更改为:
HEADER *createHeader(void)
{
HEADER *yourHeader = malloc(sizeof(HEADER));
if (yourHeader == NULL)
printErrorAndExit();
yourHeader->first = NULL;
yourHeader->last = NULL;
yourHeader->length = 0;
return yourHeader;
}
使用:
Header *header = createHeader();
if (header == NULL)
exit(-1);
或者,使用指向指针的指针作为参数:
void createHeader(HEADER **yourHeader)
{
*yourHeader = malloc(sizeof(HEADER));
if (*yourHeader == NULL)
printError();
(*yourHeader)->first = NULL;
(*yourHeader)->last = NULL;
(*yourHeader)->length = 0;
}
使用:
Header *header = NULL;
createHeader(&header);
if (header == NULL)
exit(EXIT_FAILURE);
这两种技术可以应用于大多数“分配指针”操作-创建链接列表是一种特别常见的变体。请注意,fopen()
和fclose()
与第一个模型匹配;分配器(fopen()
)接受一些参数来告诉它该怎么做,该函数返回指向可以使用的结构的指针,该指针最终可以使用并传递给fclose()
进行释放。
请注意,printErrorAndExit()
不能返回。或者,如果需要,则必须修改功能:
HEADER *createHeader(void)
{
HEADER *yourHeader = malloc(sizeof(HEADER));
if (yourHeader == NULL)
printError();
else
{
yourHeader->first = NULL;
yourHeader->last = NULL;
yourHeader->length = 0;
}
return yourHeader;
}
此功能最好不打印任何错误消息-通常会限制其可重用性。
HEADER *createHeader(void)
{
HEADER *yourHeader = malloc(sizeof(HEADER));
if (yourHeader != NULL)
{
yourHeader->first = NULL;
yourHeader->last = NULL;
yourHeader->length = 0;
}
return yourHeader;
}
替代设计可能应该返回状态而不是什么,因此您可以直接测试函数结果:
int createHeader(HEADER **yourHeader)
{
int rc = 0;
*yourHeader = malloc(sizeof(HEADER));
if (*yourHeader == NULL)
rc = -1; /* Or perhaps errno */
else
{
(*yourHeader)->first = NULL;
(*yourHeader)->last = NULL;
(*yourHeader)->length = 0;
}
return rc;
}
使用:
if (createHeader(&header) != 0)
…report error and bail out…
使用0表示成功,使用非零表示失败是很常见的(许多Unix系统调用都属于此类)。通常,负返回值表示失败,尤其是如果可以将正值用于成功时,请考虑使用open()
。但是POSIX pthread函数通常在失败时返回正错误号,在成功时返回零。