标签: malloc

如何在C中声明和初始化指向结构的指针数组?

我在C中有一个小任务.我正在尝试创建一个指向结构的指针数组.我的问题是如何将每个指针初始化为NULL?此外,在为数组成员分配内存后,我无法为数组元素指向的结构赋值.

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

typedef struct list_node list_node_t;

struct list_node
{
   char *key;
   int value;
   list_node_t *next;
};


int main()
{

   list_node_t *ptr = (list_node_t*) malloc(sizeof(list_node_t));

   ptr->key = "Hello There";
   ptr->value = 1;
   ptr->next = NULL;

   // Above works fine

   // Below is erroneous 

   list_node_t **array[10] = {NULL};      

   *array[0] =  (list_node_t*) malloc(sizeof(list_node_t));
    array[0]->key = "Hello world!";  //request for member ‘key’ in something not a structure or union
    array[0]->value = 22;            //request for member ‘value’ in something not a structure …
Run Code Online (Sandbox Code Playgroud)

c malloc null pointers structure

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

new,delete,malloc&free

我在接受采访时问过这个问题:

在C++中,

  1. 如果我们分配内存malloc并使用它delete来释放分配的内存怎么办?
  2. 如果我们使用new并使用它来释放内存free怎么办?

如果在代码中使用上述内容,我们将面临哪些问题?

我的回答是没有区别.这样说我是对的吗?

c++ malloc free memory-management new-operator

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

在64位进程中,我的mmap/malloc请求是否会被拒绝?

64位寻址的地址空间绝对是巨大的.我有一个程序,将有mmap几个内存块,每个大小为100 - 500 MB.我将不可避免地重新映射几次,这可能会导致可用的连续空间出现碎片.

无论空间出现什么碎片,对于可用的地址空间来说肯定会很小.

我的问题是:鉴于这些限制,在正常情况下,我可以期望所有mmap请求成功(即由于碎片而不会失败)吗?他们失败的原因是什么?

我知道堆本身没有整个空间,但我认为它占绝大多数.

Mac OS/Linux.

c malloc operating-system memory-management mmap

13
推荐指数
2
解决办法
4139
查看次数

我们应该检查内存分配是否失败?

我已经看到很多代码在进行分配时检查NULL指针.这使代码变得冗长,如果没有一致地完成,只有当程序员感觉到它时,甚至不能确保程序在地址空间用完时不会崩溃.此外,如果程序无法进行更多分配,那么它无论如何都无法完成其功能,对吧?

所以我的问题是,对于大多数程序来说,根本不检查并且如果内存耗尽会让程序崩溃,这不是更好吗?至少代码更具可读性.

注意

我说的是在现代计算机上运行的桌面应用程序(至少2 GB的地址空间),而且绝对不会运行航天飞机,生命支持系统或BP的石油平台.最重要的是,我在谈论使用malloc但从未真正超过5 MB内存使用量的程序.

c malloc error-handling

13
推荐指数
3
解决办法
9342
查看次数

malloc编译错误:类型为"int"的值不能用于初始化int(*)类型的实体[30]

我现在必须尝试过20种方法.我真的需要帮助,无论我做什么,我都会收到与此类似的错误.

a value of type "int" cannot be used to initialize an entity of type "int (*)[30]"
Run Code Online (Sandbox Code Playgroud)

即这会让我这样一个错误

int(*array)[160] = malloc((sizeof *array) * 10);
Run Code Online (Sandbox Code Playgroud)

并做这样的事情

int** Make2DintArray(int arraySizeX, int arraySizeY) {
    int** theArray;
    theArray = (int**) malloc(arraySizeX*sizeof(int*));
    int i;
    for (i = 0; i < arraySizeX; i++)
    {
        theArray[i] = (int*) malloc(arraySizeY*sizeof(int));
    }
    return theArray;
}
Run Code Online (Sandbox Code Playgroud)

会得到我的

"void *(size_t)" in "memory.c" at line 239 and: "int()" 
Run Code Online (Sandbox Code Playgroud)

有没有人有一个解决方案如何成功分配int [160] [10]的2dArray

c malloc pointers

13
推荐指数
3
解决办法
5万
查看次数

_int_malloc和malloc之间有什么区别(在Valgrind中)

我很惊讶我找不到任何文件说明Valgrind 工具的输出_int_mallocmalloc输出之间的区别callgrind.

有人可以解释一下他们的区别吗?

此外,我实际上编写C++代码,所以我完全new不使用malloc,但在callgrind输出中只显示mallocs.

malloc valgrind memory-management dynamic-memory-allocation

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

从错误返回后释放内存的最佳方法是什么?

假设我有一个为调用者分配内存的函数:

int func(void **mem1, void **mem2) {
    *mem1 = malloc(SIZE);
    if (!*mem1) return 1;

    *mem2 = malloc(SIZE);
    if (!*mem2) {
        /* ... */
        return 1;
    }

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

在第二个malloc()失败的情况下,我想听听你对free()分配内存的最佳方法的反馈.你可以想象一个更复杂的情况,有更多的错误退出点和更多分配的内存.

c memory malloc free

12
推荐指数
3
解决办法
2384
查看次数

如何在C中正确地malloc for struct数组

我将使用两组char*(或字符串)读取strtok,并且因为这两组字符是相关的,(address : command\n)所以我决定使用一个结构.

struct line* array = (struct line*)malloc(sizeof(file) * sizeof(struct line*));
Run Code Online (Sandbox Code Playgroud)

这个malloc函数的行间空间给了我一个分段错误,并想知道你是否可以告诉我一个适当的malloc空间方式.对于上下文,这是我的其余代码:

struct line
{
    char* addr;
    char* inst;
};
while loop{
    x = strtok(line,": ");
    y = strtok(NULL,"\n");
    strcpy(array[i].addr,x); //assume that x and y are always 3characters
    strcpy(array[i].inst,++y);
    i++;
}
Run Code Online (Sandbox Code Playgroud)

c arrays malloc struct

12
推荐指数
2
解决办法
6万
查看次数

:: operator new(size_t)是否使用malloc()?

是在内部::operator new(size_t)调用malloc(),还是直接使用系统调用/特定于操作系统的库调用?C++标准说什么?

这个答案中它说:

malloc()保证返回与任何标准类型对齐的地址.::operator new(n)只保证返回一个不大于任何标准类型的地址n,如果T不是一个字符类型,那么new T[n]只需要返回一个对齐的地址T.

这表明new()不需要打电话malloc().

注意:这里有一个SO 问题有关的一切operator new其他比分配.

c++ malloc new-operator dynamic-memory-allocation

12
推荐指数
2
解决办法
3626
查看次数

什么时候使用valloc()而不是malloc()更合适?

C(和C++)包括一系列动态内存分配函数,其中大部分都是直观命名的,并且易于向程序员解释,并对内存有基本的了解.malloc()简单地分配内存,同时calloc()分配一些内存并急切地清除它.还有,realloc()并且free(),这是非常不言自明的.

malloc()也提到的联机帮助页valloc(),它分配与页边框对齐的(size)字节.

不幸的是,我的背景在低级错综复杂方面不够彻底; 分配和使用页面边界对齐的内存有什么影响,什么时候这是适当的,而不是常规malloc()calloc()

c malloc memory-management

12
推荐指数
2
解决办法
3057
查看次数