c-使用malloc分配0个字节



所以分配零字节定义不正确,所以我想将0字节视为失败。这个代码能起到的作用吗

#include <stdio.h>
#incude "xmalloc.h"
void *malloc_or exit(size_t nbytes, const char *file, int line){
void *x; //declarea void pointer
if ((x = malloc(nbytes)) == NULL){
fprintf(stderr. " %s: line %d: malloc(%zu) bytes failed", file , line, nbytes);
exit(EXIT_FAILURE);
} else
return x;
}

C标准(链接到N1570草案)说:

如果请求的空间大小为零,则行为为实现定义:返回一个空指针,或者行为就像大小是某个非零值,除了返回的指针不应用于访问对象。

因此,如果使用参数0调用malloc_or_exit()函数,它可能会终止程序(如果malloc(0)返回NULL),也可能会返回一个可能未被取消引用的非空指针(取消引用这样的指针会导致未定义的行为)。

如果您想将零大小的分配视为错误,您可以修改包装器函数(未经测试):

void *malloc_or_exit(size_t size) {
    void *result;
    if (size == 0) {
        exit(EXIT_FAILURE);
    }
    else if ((result = malloc(size)) == NULL) {
        exit(EXIT_FAILURE);
    }
    else {
        return result;
    }
}

如果大小为零,则返回值取决于特定的库实现(它可能是也可能不是空指针),但返回的指针不应被取消引用。

ref:malloc

int i = 4;
void *x;
if( ( i != 0 ) && ( ( x = malloc(i) ) != NULL ) )
{
    // malloc successfull
}
else
{
    // not successfull
}
return 0;

否-根据whats-the-point-in-malloc0,非null返回值可能对您的应用程序仍然没有用处。

相关内容

  • 没有找到相关文章

最新更新