Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用(char*)malloc(0)和NULL初始化字符串之间的差异_C_String - Fatal编程技术网

使用(char*)malloc(0)和NULL初始化字符串之间的差异

使用(char*)malloc(0)和NULL初始化字符串之间的差异,c,string,C,String,在这种情况下,为什么分配0大小的字符块有效?但是如果我写char*string=NULL;这行不通 我正在使用VisualStudio int main() { char *string = (char *)malloc(0); string[0] = 'a'; string[1] = 'b'; string[2] = 'c'; string[3] = 'd'; string[4] = '\0'; printf("%s\n",str

在这种情况下,为什么分配0大小的字符块有效?但是如果我写char*string=NULL;这行不通

我正在使用VisualStudio

int main()
{   
    char *string = (char *)malloc(0);
    string[0] = 'a';
    string[1] = 'b';
    string[2] = 'c';
    string[3] = 'd';
    string[4] = '\0';

    printf("%s\n",string);
    return 0;
}

上面的代码调用未定义的行为。您分配的内存不足,正在访问无效地址


根据规范,将返回一个空指针或一个可以成功传递给free的唯一指针。

上述代码调用未定义的行为。您分配的内存不足,正在访问无效地址

根据规范,将返回一个空指针或一个可以成功传递到free的唯一指针。

malloc定义:

分配一个大小为字节的内存块,返回指向 街区的起点

新分配的内存块的内容未初始化, 保留不确定的值

如果大小为零,则返回值取决于特定的库 实现它可能是空指针,也可能不是空指针,但返回 指针不应被取消引用

取自并找到。

malloc定义:

分配一个大小为字节的内存块,返回指向 街区的起点

新分配的内存块的内容未初始化, 保留不确定的值

如果大小为零,则返回值取决于特定的库 实现它可能是空指针,也可能不是空指针,但返回 指针不应被取消引用


取自并找到。

首先让我说明,根据malloc的

malloc函数分配大小字节并返回指向已分配内存的指针。内存未初始化。如果size为0,则malloc返回NULL或唯一的指针值,该值可以在以后成功传递给free

像malloc0这样的调用本身是有效的,但是我们需要检查返回指针的有效性。也可以

返回空值 返回一个可以传递给free的指针。 但无论如何,不允许取消对该指针的引用。它将导致超出绑定的内存访问并导致

也就是说,有两件重要的事情要提

请用C输入malloc和family的返回值

在使用返回的指针之前,请检查malloc的返回值

那么回答你的问题,

使用char*malloc0和NULL初始化字符串之间的区别


在这种情况下,不要使用malloc0,因为指针上的NULL检查可能会失败,给人一种错误的印象,以为指针的内存分配是有效的。初始化时始终使用NULL

首先让我说明,根据malloc的

malloc函数分配大小字节并返回指向已分配内存的指针。内存未初始化。如果size为0,则malloc返回NULL或唯一的指针值,该值可以在以后成功传递给free

像malloc0这样的调用本身是有效的,但是我们需要检查返回指针的有效性。也可以

返回空值 返回一个可以传递给free的指针。 但无论如何,不允许取消对该指针的引用。它将导致超出绑定的内存访问并导致

也就是说,有两件重要的事情要提

请用C输入malloc和family的返回值

在使用返回的指针之前,请检查malloc的返回值

那么回答你的问题,

使用char*malloc0和NULL初始化字符串之间的区别


在这种情况下,不要使用malloc0,因为指针上的NULL检查可能会失败,给人一种错误的印象,以为指针的内存分配是有效的。初始化时始终使用NULL

它不起作用;它充其量只是假装在工作。未定义的行为被称为未定义且不保证崩溃,原因很充分。您预期会发生什么以及为什么?这根本不是重复。可能重复的行为不起作用;它充其量只是假装在工作。未定义的行为被称为未定义且不保证崩溃是有很好的理由的。您预期会发生什么以及为什么?这根本不是重复的。可能是s/random/invalid的重复。内存分配器的行为是非常不随机的,这会造成一个可怕的PRNG。@Quentin但这是一个程序员的问答网站,如果有人给出答案,应该正确地表达出来。我还可以决定,从现在开始,我用字符串来表示函数,然后每当有人指出不能调用字符串时,我就抱怨我只是用字符串来表示函数。有些人试图使用内存分配地址作为随机数的来源。让我们不要鼓励传播感染,如果这些随机数字最终加密了你的HTTPS流量呢?你想不想去
“帽子?”昆汀长大了。说真的,如果你看不到正确表述一个人所说的话的价值,我甚至不想和你进一步争论。@paramagnetic croissant我甚至不知道你为什么要争论。当然,对于不确定的地址,“无效”比“随机”要好。只是一想到有人跳到random这个词的出现上,试图把它变成一个PRNG,我就笑了。没有理由不高兴。s/random/invalid。内存分配器的行为是非常不随机的,这会造成一个可怕的PRNG。@Quentin但这是一个程序员的问答网站,如果有人给出答案,应该正确地表达出来。我还可以决定,从现在开始,我用字符串来表示函数,然后每当有人指出不能调用字符串时,我就抱怨我只是用字符串来表示函数。有些人试图使用内存分配地址作为随机数的来源。让我们不要鼓励传播感染,如果这些随机数字最终加密了你的HTTPS流量呢?“你愿意吗?”昆汀长大了。说真的,如果你看不到正确表述一个人所说的话的价值,我甚至不想和你进一步争论。@paramagnetic croissant我甚至不知道你为什么要争论。当然,对于不确定的地址,“无效”比“随机”要好。只是一想到有人跳到random这个词的出现上,试图把它变成一个PRNG,我就笑了。没有理由不高兴。调用malloc0不会导致未定义的行为,并且返回的地址也不是特别随机的。调用malloc0不会导致未定义的行为,并且返回的地址也不是特别随机的。特别是,它必须是唯一的。