关于ANSI C:来自calloc API的测试返回:ANSI C:来自calloc API的测试返回 – 与windows和ibm cics不同

ANSI C : test return from calloc API - differ from windows and ibm cics

本问题已经有最佳答案,请猛点这里访问。

下面的ansi c代码在使用viasual studio 2010编译时返回有效指针(编译为c代码(/tc)):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

void main()
{
    void * p = NULL;
    int i=0;

    p = calloc(0, 100 );

    if ( p != NULL )
    {
        printf ("Success.
"
);

        free ( p );
        p = NULL;
    }
    else
    {
        printf ("Fail.
"
);
    }
}

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

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


如CPPreference提供的文件所述:

If size is zero, the behavior is implementation defined (null pointer may be returned, or some non-null pointer may be returned that may not be used to access storage)

别那么做。

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