相关疑难解决方法(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万
查看次数

在C中,为什么有些人在释放之前会抛出指针?

我正在研究一个旧的代码库,几乎每次调用free()都会在其参数上使用强制转换.例如,

free((float *)velocity);
free((float *)acceleration);
free((char *)label);
Run Code Online (Sandbox Code Playgroud)

其中每个指针都是相应的(和匹配的)类型.我完全没有理由这样做.这是非常古老的代码,所以我想知道它是否是K&R的东西.如果是这样,我实际上希望支持可能需要这个的旧编译器,所以我不想删除它们.

使用这些演员阵容有技术原因吗?我甚至没有看到使用它们的实用理由.在释放数据类型之前提醒自己有什么意义?

编辑:这个问题不是另一个问题的重复.另一个问题是这个问题的一个特例,如果亲密的选民能够阅读所有的答案,我认为这是显而易见的.

Colophon:我给出了"常量答案"的核对标记,因为这可能是为什么需要这样做的真正原因; 然而,关于它是一个ANSI C之前的习惯(至少在一些程序员中)的答案似乎是它在我的情况下使用的原因.很多人在这里有很多好处.感谢您的贡献.

c pointers casting

164
推荐指数
6
解决办法
1万
查看次数

转换void指针

我在旧的C代码中看到了很多以下内容:

type_t *x = (type_t *) malloc(...);
Run Code Online (Sandbox Code Playgroud)

从那里malloc()开始返回指针的重点是什么void *?是因为较旧的C编译器不支持void指针而是malloc()习惯返回char *

c pointers void-pointers

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

free()如何影响堆上的内存地址?

这个赋值要求我们使用malloc()(命名var1var2)分配两个int类型变量,打印每个变量的地址(堆栈上指针的地址和堆上的地址),然后free()用来解除分配var1,再次打印地址,然后在堆中分配另一个空间var1并第三次打印地址.我相信教师试图告诉我们堆地址var1应该改变,但它始终保持不变......除非我free(var1)从代码中删除.教练做了类似的演示,但没有free()用来解除分配任何变量,所以我们从来没有看到它应该如何工作.

这是我的代码:

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

void main()
{

int *var1 = (int*)malloc(sizeof(int)); 
*var1 = 1000;                   
int *var2 = (int*)malloc(sizeof(int)); 
*var2 = 2000;

printf("Addresses of var1\n");
printf("Pointer on stack: %p / Heap: %p\n\n", &var1, var1); 
printf("Addresses of var2\n");
printf("Pointer on stack: %p / Heap: %p\n\n", &var2, var2);

free(var1);

printf("AFTER DEALLOCATING var1 FROM THE HEAP\n");
printf("Addresses of var1\n");
printf("Pointer on stack: %p / …
Run Code Online (Sandbox Code Playgroud)

c malloc free heap-memory memory-address

14
推荐指数
2
解决办法
1069
查看次数

当我不转换malloc的结果时,为什么编译器会抱怨?

我正在检查不需要显式地转换malloc调用结果的代码,但每当我尝试这样做时,编译器都会抛出错误.

char *somevar;
somevar = malloc(sizeof(char) * n); //error
somevar = (char *)malloc(sizeof(char) * n); // ok
Run Code Online (Sandbox Code Playgroud)

c malloc casting compiler-errors

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