相关疑难解决方法(0)

malloc(0)中有什么意义?

刚看到这段代码:

artist = (char *) malloc(0);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样做?

c malloc

115
推荐指数
5
解决办法
6万
查看次数

为什么malloc(0)的返回值是实现定义的?

ISO/IEC 9899:TC2(即C99标准),§7.20.3规定:

如果请求的空间大小为零,则行为是实现定义的:返回空指针,或者行为就像大小是非零值一样,但返回的指针不应用于访问对象.

换句话说,malloc(0)可以返回NULL或有效指针,我可能不会取消引用.

这种行为背后的理由是什么?
并且定义malloc(0)导致UB不是更容易吗?

c c++ malloc memory-management

16
推荐指数
3
解决办法
834
查看次数

realloc失败的几率是多少?

当它的可用内存耗尽时是否会失败malloc?或者是否有其他原因?

c memory-management realloc

9
推荐指数
3
解决办法
5248
查看次数

7
推荐指数
1
解决办法
3678
查看次数

Valgrind丢失零字节

当Valgrind报告o字节丢失时,这意味着什么,就像这里:

==27752== 0 bytes in 1 blocks are definitely lost in loss record 2 of 1,532
Run Code Online (Sandbox Code Playgroud)

我怀疑它只是一个创造性使用的神器malloc,但确定是好的( - ;

编辑:当然真正的问题是它是否可以被忽略,或者它是一个有效的泄漏,应该通过释放这些缓冲区来解决.

valgrind memory-leaks

7
推荐指数
1
解决办法
2542
查看次数

在我的例子中需要帮助来理解malloc(0)

我试图理解双指针(这是指针持有另一个指针)的内部形成一个指针数组.所以,我试图运行以下代码,通过试验malloc进行调试,看看它是如何工作的.我无法理解malloc(0)我的情况,但我的代码通过输出"Hello World"来工作.

什么是差异

pToCharsPointers = (char**) malloc(0);
Run Code Online (Sandbox Code Playgroud)

pToCharsPointers = (char**) malloc(2 * sizeof(char*));
Run Code Online (Sandbox Code Playgroud)

请有人澄清一下我的情况.

#include <stdio.h>

char **pToCharsPointers;

int main(void)
{
    pToCharsPointers = (char**) malloc(0);

    char* pToChars = "Hello";
    *pToCharsPointers = pToChars;

    *(pToCharsPointers + 1)= "World";

    printf("%s %s\n", *(pToCharsPointers + 0), *(pToCharsPointers + 1));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

另外,如果有人能解释双指针如何与内存中的示例一起工作以进行可视化,我会非常感激,因为即使我试图在很多地方阅读此内容,我仍未能看到自己.

编辑:感谢大家分享您的答案,这真的有助于理解.当我打印它时,我得到了一个带有malloc(0)的有效指针,并且在多次尝试期间也可以解除引用它而没有问题.想了解它的工作原理.在我的情况下似乎未定义的行为实际上是预期的行为.

c memory malloc pointers dynamic-memory-allocation

5
推荐指数
1
解决办法
113
查看次数

如果malloc(STL分配器等)请求分配0个字节会发生什么

可能重复:
malloc(0)返回什么?

它会返回零指针吗?行为标准化了吗?

STL分配器怎么样?

我用Google搜索,但无法确定我正在寻找的答案.

编辑:链接的问题不解释STL分配器.

我有另一个相关的问题.如果试图释放零指针会发生什么?

allocator.deallocate(0, 1);
Run Code Online (Sandbox Code Playgroud)

c c++

4
推荐指数
1
解决办法
587
查看次数

c释放malloc(0)

我在c中编写一个应用程序,我正在动态分配一些数组所需的内存.我知道很多这些数组都需要零分配.那么,当我打电话给他们时会有问题吗?例如free(malloc(0 * sizeof(int)));?我知道我的应用程序在我的机器上编译并运行正常,但我可以依赖它吗?干杯!

c malloc free zero

2
推荐指数
1
解决办法
1289
查看次数

malloc(-1)返回NULL但malloc(0)不是为什么?怎么能分配0个内存空间

可能重复:
malloc(0)中有什么意义?
malloc(0)返回什么?

此代码显示"unsuccesful"但如果将0替换为0则不会为NULL.我不知道如何分配0个内存空间.我知道没有用但是不是NULL == 0L所以它也应该是== 0 ..

#include <stdio.h>
#include <stdlib.h>
int main()
{
int *ptr;
if((ptr = malloc(-1)) == NULL)
    printf("unsuccessful: no memory space was allocated.\n");
else{
    printf("successful: memoryspace was allocated. \n");
    free(ptr);
}
getch();
return 0;

}
Run Code Online (Sandbox Code Playgroud)

c memory malloc null

1
推荐指数
1
解决办法
3434
查看次数

gcc:如何定义"实现定义的"malloc(0)?

C标准(例如C99)告诉malloc(0)返回"空指针或可以成功传递给free()的唯一指针".这两者中的哪一个是实现定义的.(这已被要求在计算器上多次,例如1,2,3,4).

我的问题是:海湾合作委员会如何定义它?

c malloc gcc

0
推荐指数
1
解决办法
103
查看次数