【问题标题】:How can i check if char pointer is points nothing after allocated如何检查 char 指针在分配后是否指向任何内容
【发布时间】:2019-04-22 16:23:20
【问题描述】:

我在这段代码中为char 指针分配了内存,我想检查它是否指向任何东西:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    char *p  = (char*) malloc(sizeof(char)*10);
    if(*p == 0)
       printf("The pointer points nothing !\n");

}

我检查了它是否没有指向任何东西。我还打印了指针的长度,它打印了“3”,尽管它什么也没打印。这是什么原因,我如何检查它是否没有任何意义?

【问题讨论】:

  • malloc分配的空间未初始化。无法检查某些内容是否未初始化。您应该在读回之前将值存储在那里
  • 我没有看到您'打印指针长度并打印“3”'的代码 - 你发帖时是否不知何故丢失了?
  • 对不起,我忘记添加了。

标签: c pointers char malloc


【解决方案1】:

您需要修改检查以检查返回的指针,而不是内容。类似的东西

if( p == NULL) {
    fprintf(stderr, "The pointer points nothing !\n");
    return 1;
 }

应该这样做。引用有关返回值的标准:

malloc 函数返回空指针或指向已分配空间的指针。

如果失败则返回空指针,否则返回的指针应该不等于空指针。

也就是说,

  • 指向内存的初始内容是不确定的,不要尝试验证它。引用标准,

    malloc 函数为大小由size 指定的对象分配空间,并且 其值不确定。

    这适用于您关于 “检查指针长度” 的其他问题 - 这是没有意义的。除非您在其中存储(写入)一些值 - 尝试测量初始内容是没有意义的,因为它是不确定的。你最终可能会遇到undefined behavior

  • malloc() 和 family 对返回指针的强制转换是多余的。 It can be totally avoided in C.

  • sizeof(char) 在 C 中保证为 1。因此,本身再次不需要使用sizeof(char) 作为乘数。

【讨论】:

    猜你喜欢
    • 2011-03-05
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 2013-08-20
    • 2021-03-15
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多