-1

在 xcode c 项目上,代码:

#include <stdio.h>

int main()
{

    int* pi = (int*) malloc(sizeof(int));
    *pi = 5;
    printf("*pi: %d\n", *pi);
    free(pi);



    return 0;
}

打印 't' ,而不是 5,尽管我明确包含了 %specifier,但根据规范应该打印带符号的十进制整数。我希望 '%c' 说明符会打印出来。到底是怎么回事?

在此处输入图像描述

4

1 回答 1

2

C 动态内存分配函数在stdlib.h头文件中定义。

如果您将“标准库”添加到您的代码中,它应该可以正常运行而不会出现任何错误。

此外,当 malloc() 未能分配所请求的空间时,它会返回一个空指针。因此,您应该使用简单的 if-else 块确保您收到的内容不为 NULL。

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int* pi = (int*) malloc(sizeof(int));

    if(pi==NULL){
       printf("Malloc Failed!");
       return -1;
    }
    else{
        *pi = 5;
        printf("*pi: %d\n", *pi);
        free(pi);
        return 0;
    }

}

上面的代码块给出了预期的结果 *pi: 5。

希望这可以帮助,

参考: https ://en.wikipedia.org/wiki/C_dynamic_memory_allocation

于 2015-12-28T18:22:46.283 回答