我正在编写一些依赖于calloc的代码,并想知道如果calloc失败,将指针重定向到堆栈空间是否安全,然后在调用free()之前将指针设置为NULL或者完全跳过它。 在我的386 linux计算机上运行良好。
char *str = NULL;
int usestackspace = 0;
char str1[16] = {0};
str = (char *)calloc(1, sizeof(pid_t));
if (str == NULL) {
sleep(1);
str = (char *)calloc(1, sizeof(pid_t));
}
if (str == NULL) {
fprintf(stderr, "watchdog: %s\n", strerror(errno));
usestackspace = 1;
str = str1;
}
if (str == NULL) {
return -1;
}
free
和str = NULL;
是无意义的,但除此之外看起来还不错。 - Kerrek SBreturn -1;
是无用代码。优化编译器可能会完全省略第三个if
。 - Pascal Cuoq