Tag: malloc

在C中是malloc(256)和malloc(sizeof(char)* 256)等价吗?

我看到人们经常编写C代码,例如: char *ptr = malloc(sizeof(char)*256); 这真的有必要吗? 根据定义,标准说sizeof(char)==1 ,所以写入是不合理的: char *ptr = malloc(256); 谢谢,Boda Cydo。

你怎么知道用malloc()分配多少空间?

我是C新手,我来自C#。 我一直在学习内存管理和malloc()函数。 我也遇到过这段代码: char *a_persons_name = malloc(sizeof(char) + 2); 我不明白的是这为a_persons_name分配了多少空间。 是分配2个字符(例如AB)还是别的? 我也知道你有时可以使用malloc “幸运”并使用未分配的空间(这可能导致数据损坏和seg错误)。 那么我怎么知道我分配了多少空间以及我需要多少空间?

为什么函数可以通过malloc返回数组设置,但不能通过“int cat = {0,0,0};”返回一个设置。

为什么我可以通过malloc从函数返回数组设置: int *dog = (int*)malloc(n * sizeof(int)); 但不是由数组设置 int cat[3] = {0,0,0}; 返回“cat []”数组并显示警告。 感谢你的帮助

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

我在接受采访时问了这个问题。 假设char * p = malloc(n)分配多于n,分配N个字节的内存,free(p)用于释放分配给p的内存。 堆管理器可以执行这样的错误分配吗? 现在发生了什么,将释放n个字节或释放N个字节? 有什么方法可以找到释放多少内存? 编辑 有什么方法可以找到释放多少内存? 有总比没有好, mallinfo()可以像“Fred Larson”所指出的那样轻松一些

C通用链表

我有一个通用链接列表,其中包含void *类型的数据我试图用类型struct employee填充我的列表,最终我想破坏对象struct employee。 考虑这个通用的链表头文件(我用char *类型测试过它): struct accListNode //the nodes of a linked-list for any data type { void *data; //generic pointer to any data type struct accListNode *next; //the next node in the list }; struct accList //a linked-list consisting of accListNodes { struct accListNode *head; struct accListNode *tail; int size; }; void accList_allocate(struct […]

strtok和内存泄漏

我用strtok()写了一个简单的url解析器。 这是代码 #include #include typedef struct { char *protocol; char *host; int port; char *path; } aUrl; void parse_url(char *url, aUrl *ret) { printf(“Parsing %s\n”, url); char *tmp = (char *)_strdup(url); //char *protocol, *host, *port, *path; int len = 0; // protocol agora eh por exemplo http: ou https: ret->protocol = (char *) strtok(tmp, “/”); […]

C:动态分配数组的memcpy速度

我需要有关以下代码性能的帮助。 它对两个任意大小的动态分配数组执行memcpy: int main() { double *a, *b; unsigned n = 10000000, i; a = malloc(n*sizeof(double)); b = malloc(n*sizeof(double)); for(i=0; i<n; i++) { a[i] = 1.0; /* b[i] = 0.0; */ } tic(); bzero(b, n*sizeof(double)); toc("bzero1"); tic(); bzero(b, n*sizeof(double)); toc("bzero2"); tic(); memcpy(b, a, n*sizeof(double)); toc("memcpy"); } tic / toc测量执行时间。 在我的电脑上,memcpy需要0.035秒(Linux,gcc版本4.4.6)。 如果我现在取消注释初始化目标数组b的行,则代码快三倍(!) – 0.011s。 我在使用循环而不是memcpy时观察到类似的行为。 通常我不关心这个,因为它足以在使用之前“初始化”内存。 […]

堆内存分配

如果我使用malloc()在我的程序中动态分配内存但是我没有在程序运行时释放内存,那么在程序终止后是否会释放动态分配的内存? 或者如果它没有被释放,并且我一遍又一遍地执行相同的程序,它每次都会分配不同的内存块吗? 如果是这样的话,我应该如何释放这段记忆? 注意:我能想到的一个答案是重新启动我正在执行程序的机器。 但是,如果我在远程计算机上执行程序并且重启不是一个选项?

对齐malloc实现的解释

这不是作业,这纯粹是为了我自己的个人教育。 我无法弄清楚如何实现一个对齐的malloc所以在网上查找并找到了这个网站 。 为方便阅读,我将发布以下代码: #include #include void* aligned_malloc(size_t required_bytes, size_t alignment) { void* p1; // original block void** p2; // aligned block int offset = alignment – 1 + sizeof(void*); if ((p1 = (void*)malloc(required_bytes + offset)) == NULL) { return NULL; } p2 = (void**)(((size_t)(p1) + offset) & ~(alignment – 1)); p2[-1] = p1; return […]

C中的数据封装

我目前正在研究一个嵌入式系统,我在电路板上有一个组件,它出现了两次。 我想为组件提供一个.c和一个.h文件。 我有以下代码: typedef struct { uint32_t pin_reset; uint32_t pin_drdy; uint32_t pin_start; volatile avr32_spi_t *spi_module; uint8_t cs_id; } ads1248_options_t; 这些都是硬件设置。 我创建了这个结构的两个实例(每个部分一个)。 现在我需要在后台保留一组值。 例如,我可以每秒从该设备读取值,并且我想保留最后100个值。 我希望这些数据不能从我的组件的“外部”访问(仅通过我的组件中的特殊function)。 我不确定如何在这里继续。 我真的需要将数组作为结构的一部分吗? 我想到的是做以下事情: int32_t *adc_values; // <– Add this to struct int32_t *adc_value_buffer = malloc(sizeof(int32_t) * 100); // <– Call in initialize function, this will never be freed on purpose 然而,我将能够从我的代码中的任何地方(也来自我的组件外部)访问我的int32_t指针,这是我不喜欢的。 […]