相关疑难解决方法(0)

malloc(0)中有什么意义?

刚看到这段代码:

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

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

c malloc

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

总是检查malloc的内存?

我常常发现自己正在做以下事情(在非关键组件中):

some_small_struct *ptr=(some_small_struct *) malloc(sizeof(some_small_struct));
ptr->some_member= ...;
Run Code Online (Sandbox Code Playgroud)

总之,我为一个小结构分配动态内存,我直接使用它而不检查malloc'ed指针.我知道程序总是有可能得不到它所要求的内存(呃!)但请考虑以下内容:

如果程序甚至无法从堆中的小结构获得一些内存,那么可能会出现更大的问题,而且它毕竟无关紧要.

那么,如果处理空指针会加剧岌岌可危的情况呢?(例如,尝试记录条件会调用更多不存在的资源等)

我的推理是否合理(足够)?

更新:

  1. 调试时"safe_malloc"函数非常有用,否则可能会有用
  2. +X 访问可以隐藏NULL指针的根本原因
  3. 在Linux上,"乐观内存分配"可以影响loom OOM(Out-Of-Memory)条件

c architecture system

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

当试图释放由堆管理器分配的内存时会发生什么,它分配的内容超过了要求?

我在接受采访时问了这个问题.

假设char*p = malloc(n)分配多于n,比如分配N个字节的内存,free(p)用于释放分配给p的内存.

堆管理器可以执行这样的错误分配吗?现在发生了什么,将释放n个字节或释放N个字节?

有什么方法可以找到释放多少内存?

编辑

有什么方法可以找到释放多少内存?

有总比没有好,

mallinfo()可以像"Fred Larson"所指出的那样轻松一些

c c++ heap malloc free

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

即使我超越分配的内存限制也没有错误?

我可能是愚蠢的,在这种情况下你需要原谅我...但我不明白这一点.我正在分配一个16个字符的缓冲区然后(在一个for循环中)放入23个(!?)随机字符,然后打印出那些东西.

我没有得到的是如何将23个字符放入一个malloc为16个字符的缓冲区...当我将循环更改为24个字符时,我得到一个错误(至少在Linux中使用gcc)... .但为什么不"更早"(17个字符应该打破它......不?)

这是我的示例代码:

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

int main()
{
    int n;
    char *buf;

    buf = malloc(16 * sizeof(*buf));
    if(buf == NULL) exit(1);

    for(n = 0; n < 22; n++)
    {
        buf[n] = rand()%26+'a';
    }
    buf[n]='\0';

    printf("Random string: %s\n", buf);

    free(buf);
    buf = NULL;

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

c

7
推荐指数
2
解决办法
135
查看次数

标签 统计

c ×4

malloc ×2

architecture ×1

c++ ×1

free ×1

heap ×1

system ×1