相关疑难解决方法(0)

我是否施放了malloc的结果?

这个问题,有人建议意见,我应该不会投的结果malloc,即

int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

而不是:

int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)

为什么会这样呢?

c malloc casting

2318
推荐指数
27
解决办法
22万
查看次数

为什么在malloc中使用sizeof(*pointer)更安全

特定

struct node
{
     int a;
     struct node * next;
};
Run Code Online (Sandbox Code Playgroud)

要malloc一个新的结构,

struct node *p = malloc(sizeof(*p));
Run Code Online (Sandbox Code Playgroud)

比...更安全

struct node *p = malloc(sizeof(struct node));
Run Code Online (Sandbox Code Playgroud)

为什么?我以为他们是一样的.

c malloc

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

"malloc(sizeof(struct a*))"和"malloc(sizeof(struct a))"是否相同?

这个问题是Malloc调用崩溃的延续,但在其他地方有效

我尝试了以下程序,我发现它工作(即没有崩溃 - 这也在上面提到的链接中提到).我很幸运能让它工作但是我正在寻找SO专家对于它为什么有效的合理解释?!

这里有一些关于memory使用malloc()wrt structures和.的分配的基本理解pointers

  • malloc(sizeof(struct a) * n)分配n类型struct a元素的数量.并且,可以使用a来存储和访问该存储器位置pointer-to-type-"struct a".基本上是一个struct a *.
  • malloc(sizeof(struct a *) * n)分配n类型struct a *元素的数量.然后,每个元素都可以指向类型的元素struct a.基本上malloc(sizeof(struct a *) * n)分配一个array(n-elements)-of-pointers-to-type-"struct a".并且,可以使用a来存储和访问分配的存储器位置pointer-to-(pointer-to-"struct a").基本上是一个struct a **.

所以当我们创造一个时array(n-elements)-of-pointers-to-type-"struct a",就是它

  1. 有效分配,struct a *而不是struct a **
  2. 有效访问/取消引用分配array(n-elements)-of-pointers-to-type-"struct a"使用 …

c struct pointers

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

标签 统计

c ×3

malloc ×2

casting ×1

pointers ×1

struct ×1