-1

下面的 ANSI C 代码在使用 Viasual Studio 2010 编译时返回一个有效指针(编译为 C 代码 (/TC)):

#include <stdio.h>
#include <stdlib.h>
#include <内存.h>

无效的主要()
{
    无效* p = NULL;
    诠释我=0;

    p = calloc(0, 100);

    如果 ( p != NULL )
    {
        printf("成功。\n");

        免费 ( p );
        p = 空;
    }
    别的
    {
        printf ( "失败.\n" );
    }
}

使用 IBM CICS 的 C 编译器的相同代码具有不同的行为,在 API 调用 calloc 时返回 NULL。
Visual Studio 2010 的行为是否正确?

由于该测试,回调在两种情况下都有不同的效果。

4

1 回答 1

3

正如 cppreference 的文档所说:

如果大小为零,则行为是实现定义的(可能会返回空指针,或者可能会返回一些可能不用于访问存储的非空指针)

只是不要那样做。

http://en.cppreference.com/w/cpp/memory/c/calloc

于 2013-04-23T21:13:23.087 回答