我在这段代码中为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",尽管它什么也不打印。这是什么原因?如果它没有任何意义,我该如何检查?
您需要修改检查以检查返回的指针,而不是内容。类似的东西
if( p == NULL) {
fprintf(stderr, "The pointer points nothing !n");
return 1;
}
应该这样做。引用关于返回值的标准:
malloc
函数返回一个空指针或一个指向已分配空间的指针。
失败时返回空指针,否则返回的指针应不等于空指针。
也就是说,
指向内存的初始内容是不确定的,不要试图验证它。引用标准
malloc
函数为大小由size
和,其值不确定这是关于"检查长度"-这毫无意义。除非您已经存储(写入(了一些值,否则尝试测量初始内容是没有意义的,因为它是不确定的。您最终可能会遇到未定义的行为。
malloc()
和族对返回指针的强制转换是多余的。在C.中完全可以避免sizeof(char)
在C中保证为1。因此,再次不需要使用sizeof(char)
作为乘法器,本身。