首页 文章
  • 0 votes
     answers
     views

    调用malloc()会覆盖静态表

    我正在使用STM32F4微控制器内的ARM Cortex M4F(M3),没有操作系统 . 语言是纯粹的C. 我遇到malloc()函数的问题 . 下面的代码使用从SD卡读取的全局和易失性数据表(volatile unsigned char [] fat_sector_buffer) . 在函数中,我声明了指针内存(用于从表中读取数据的结构类型作为结构),并将内存分配为从RTC保存日期和时间的第二...
  • 50 votes
     answers
     views

    为什么memcpy()的速度每4KB大幅下降?

    我测试了 memcpy() 的速度,注意到速度在i * 4KB时急剧下降 . 结果如下:Y轴是速度(MB /秒),X轴是 memcpy() 的缓冲区大小,从1KB增加到2MB . 子图2和子图3详述了1KB-150KB和1KB-32KB的部分 . 环境: CPU:Intel(R)Xeon(R)CPU E5620 @ 2.40GHz 操作系统:2.6.35-22-通用#33-Ubuntu GCC编译...
  • -1 votes
     answers
     views

    使用Malloc通过GMP处理大量数字

    已解决: 我觉得很蠢 . GMP很好,这是我的疏忽 . 使用 size_t mpz_sizeinbase (const mpz_t op, int base) 后,我意识到我用来复制结果的char数组太小了 . 增加它的大小解决了它 . 谢谢您的帮助! 我的任务是编写一个C程序,它计算从第1024个元素到第1048576个元素的斐波纳契数列的元素(从2的10次幂到2的20次幂,增加2的幂) ....
  • 1 votes
     answers
     views

    内存分配释放

    我正在编写链接列表,并在删除节点时尝试释放内存分配 . 但是,经过几个小时的尝试,我似乎无法获得干净的valgrind输出 . void * pop(struct List *list) { if(list->head == 0){ return 0; } struct Node * tempNode = list->head->next...
  • 0 votes
     answers
     views

    将内存分配给struct-nodes

    我很好奇关于用c语言创建结构节点的一个问题 它是关于struct-objects的分配内存 . 我做了以下简单的代码,打印字母"h"和"e",我为第一个结构和第二个结构对象分配了内存 . 试验我删除(发表评论)otf第一个malloc即( ptrList = malloc(sizeof(list)); ) 实际上 - 没有崩溃 - 它仍然有效,这是我的问题 ...
  • 0 votes
     answers
     views

    在C中使用Free()时的运行时错误

    我正在尝试在C中使用结构的链接列表,其中一个结构表示列表,另一个结构表示列表的成员 . 这是他们的定义: typedef struct symEntry symEntry; struct symEntry{ const char * key; const void * value; struct symEntry * next; struct symEntry *...
  • 1 votes
     answers
     views

    释放分配的内存

    gcc 4.4.5 c89 我有一个名为create_object的函数,我为全局结构分配内存 . 我有一个名为destroy_object的函数,我检查指针是否为空,然后我自由 . 只是因为我释放了尚未分配的内存 . 但是,我通过连续两次调用destroy_object来测试它 . 但是,我在第二次调用时获得了堆栈转储 . 但是,我确信它不会释放,因为我已将指针指定为NULL . 所以应该跳过免...
  • 0 votes
     answers
     views

    如何在C中合并两段内存?

    我应该使用链表实现硬编码malloc和free,其中链表包含免费的节点 . 1.如果正在释放某些东西,我必须用内存检查左右位置,如果它们是空闲的,则将它们合并在一起 . 但是,在以下调用之后,我遇到以下问题 . 注意我们malloc超过x字节b / c它是x sizeof(struct Node) Original Linked List: [2048] Call: ...
  • 3 votes
     answers
     views

    在malloc和calloc之间分配连续的内存

    我读了很多关于malloc和calloc的链接,但我仍然对“在malloc和calloc之间分配连续内存之间”感到困惑 . 在某些链接中,他们给malloc分配连续内存作为字节块但是在某些链接中,他们给出了calloc为元素数组分配连续内存 . 请给我清楚的想法 .
  • 0 votes
     answers
     views

    你应该什么时候将指针的大小与结构本身的大小相关联?

    我无法理解指针的malloc大小何时与结构的大小相关 . 例如: 我有一个结构: typedef struct { char *String; int Length; } WORD; 我想使用指针创建一个指向WORD数组的指针: WORD **WordArray; WordArray = malloc(sizeof(WORD*)) //Since WordArray is...
  • 1 votes
     answers
     views

    将内存分配给包含结构的节点

    所以说我有一个来自双向链表的节点 typedef struct node { struct node *pPrev; struct node *pNext; struct record *data; }Node; 和以下结构命名记录,在该命名的songlength中有一个struct typedef struct record { char *artist; char *albu...
  • 3 votes
     answers
     views

    EXC_BAD_ACCESS调用malloc函数时

    我有以下功能,但有时它在malloc函数调用失败,我不知道原因,我认为这可能是由于缺少堆大小但我已经监控堆,我知道我有足够的空间可用对于malloc失败时的内存分配,任何人都可以向我提出任何建议 char *substr(const char *pstr, int start, int numchars) { char *pnew; pnew=malloc(numchars+1); //th...
  • 0 votes
     answers
     views

    malloc内存分配

    我有一个初学者问题,我需要传递指向函数的指针,然后为此指针分配dinamic内存 . 我在main函数中创建指针,然后将其传递给应该分配内存的特定函数 . 但我收到此错误:“hist_array可能在此函数中未初始化使用” 这是该计划的相关内容:来自主要: int* hist_array; fillHistogram(first_image,hist_array,max_value+1);...
  • 3 votes
     answers
     views

    在C中的结构中,是否需要malloc空间用于函数指针?

    例如,我必须在函数中使用以下参数创建结构:一个函数指针,格式为:void(* func)(void *)和一个int id . 要创建的结构如下: typedef struct example { int id; void (*func)(void *); } Example; 现在我的问题是当我为整个结构我的malloc空间时,我是否也为void函数指针的malloc空间,因为...
  • 1 votes
     answers
     views

    C指针分配指针

    我的代码有效,但我不太明白为什么 . 我正在分配一个带字符串的指针,将该字符串传递给一个函数,然后对其进行修改 . 我很困惑,即使输入的字符串远远大于原始字符串,它似乎运行正常 . 我希望它抱怨覆盖内存,特别是因为原始指针不是MALLOC / CALLOCed . void changeArray(char *(*anArray)[3]); 功能声明 char *testArray[] = { ...
  • 2 votes
     answers
     views

    K&R哈希函数

    以下代码的一部分是K&R的简单哈希查找算法的实现 . lookup在表中搜索s,并返回指向找到它的位置的指针,如果不存在,则返回NULL: struct hashElement *lookup(char *name){ struct hashElement *currentStruct; int cmp; for (currentStruct = hashTable[ca...
  • 1 votes
     answers
     views

    查找malloc函数指定的大小[重复]

    可能重复:查询已分配块大小的任何函数?仅使用返回的指针获取malloc的大小 让我们说我让用户使用malloc函数指定要传递给int * x的字节数 . 有没有办法确定分配给整数的实际字节数?
  • 12 votes
     answers
     views

    在函数返回后,函数中分配的内存是否仍然保持分配状态?

    对于以下代码: (1) "main"调用函数"f1" . (2) 函数"f1"做了一些数字处理;使用malloc创建一个"char"数组,然后将数组的指针返回给main(不分配-freeing-数组) . 我有3个与案例有关的问题: (1) 我假设,虽然函数"f1"已经终止,但分配的char数...
  • 5 votes
     answers
     views

    Windows内存分配问题

    我目前正在研究Windows下的 malloc() 实现 . 但在我的研究中,我偶然发现了困扰我的事情: 首先,我知道在API级别,Windows主要使用 HeapAlloc() 和 VirtualAlloc() 调用来分配内存 . 我从here收集 malloc() 的Microsoft实现(包含在CRT中的那个 - C运行时)基本上调用 HeapAlloc() 用于块> 480字节,否...
  • 3 votes
     answers
     views

    通过Malloc增加分配给结构的内存大小

    我刚刚了解到,在使用malloc函数时,可以增加分配给结构的内存大小 . 例如,你可以有这样的结构: struct test{ char a; int v[1]; char b; }; 它显然只有2个字符和1个int(实际上指向int的指针,但无论如何) . 但是你可以用这样的方式调用malloc来使struct保持2个字符和你想要的多个int(让我们说10): int ...
  • 0 votes
     answers
     views

    在没有动态分配的情况下保留结构

    我一直在和这个问题争斗几个小时 . 我有一个双向链表实现,不需要动态内存分配 . 这是插入方法 . 它在 before 之前插入 elem . struct list 有两个成员, struct list_elem *next 和 struct list_elem *prev . list_elem 是一个包含一些数据的结构 . 请注意,此列表实现是正确的 . 问题在于我使用它的方式 ...
  • 6 votes
     answers
     views

    堆内存和平板分配

    我对 heap 和 free list 很困惑 . 我有几个问题,我对malloc如何在C中工作有我自己的理解 . 如果我错了,请纠正我 . 堆内存是否组织为数据块的链表(空闲列表)? 堆内存和空闲列表之间有区别吗? 我对存储分配的理解(可以改进): - 当我们调用malloc时,它会在堆中分配内存,并通过从 free list 中选择合适大小的数据块来实现,对吧? 当malloc返回...
  • -1 votes
     answers
     views

    分配动态多个数组

    假设我们有以下设计: typedef struct { double **pdouble; int *pint }foo; 现在我要分配: foo *pfoo; 问题是pdouble的总数是已知的,让我们说n;如果我们说** pdouble就像pdouble [a] [b],a也是众所周知的 . 表示a * b = n . 但是b是动态的 . mean pdouble [1]可能包含...
  • 0 votes
     answers
     views

    如何键入将结构转换为已分配的char内存空间

    我试图使用堆上一段内存的前几个字节来存储使用C语言(而不是C)的段内存的元数据 . 使用以下内容创建堆空间: char* start_mem = (char*)malloc(10*sizeof(char)); //10 bytes of memory 现在,我试图在分配的堆空间的前4个字节中放置一个'meta'结构 . typedef struct{ int test; }meta_t;...
  • 6 votes
     answers
     views

    memcpy对动态存储结构是否安全?

    语境: 我正在审查一些代码,这些代码将IO描述符中的数据接收到字符缓冲区中,对其进行一些控制,然后使用部分接收缓冲区来填充结构,并突然想知道是否可能涉及严格的别名规则违规 . 这是一个简化版本 #define BFSZ 1024 struct Elt { int id; ... }; unsigned char buffer[BFSZ]; int sz = read(fd, buff...
  • 672 votes
     answers
     views

    malloc和calloc之间的区别?

    做的有什么区别: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); 要么: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); 什么时候使用calloc而不是malloc是一个好主意,反之亦然?
  • 1 votes
     answers
     views

    使用灵活阵列成员的奇怪行为

    我尝试使用更容易接受的习惯用一个灵活的数组成员替换结构的void *成员: typedef struct Entry { int counter; //void* block2; // This used to be what I had unsigned char block[1]; } 然后我将条目添加到连续的内存块中: void *memPtr = mmap(NUL...
  • 0 votes
     answers
     views

    从结构中的2D数组中自由动态分配的内存

    我有一个指向结构的指针,结构中的一个对象是一个int ** . 双指针用于为2d数组动态分配内存 . 我无法弄清楚如何释放这个数组的内存 . 有任何想法吗? struct time_data { int *week; int *sec; int **date; }; typedef struct time_data time_data; time_data *getTim...
  • 7 votes
     answers
     views

    calloc()比malloc()&memset()慢

    我想问你一个问题 . 我有以下代码: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define XXX 1024*1024 int main() { int *p; unsigned long x=0; while (1) ...
  • 0 votes
     answers
     views

    访问在循环内使用malloc创建的变量比本地声明的变量更快吗?

    我有一个循环中的应用程序并使用一个变量 . 基本上它只是将一个字符串复制到变量处理它然后移动到下一个字符串 . 我想知道如何声明我需要使用的变量,所以我编写了这段代码来测试哪一个会更快 . 有趣的是,malloc比我在本地声明的变量更快 . 我也扔了calloc并且它的速度较慢,因为它可能将内存归零 . #include <stdio.h> #include <stdlib.h&...

热门问题