Tag: malloc

malloc:***对象的错误:没有分配被释放的指针***在malloc_error_break中设置一个断点来调试

有人可以帮我弄清楚我在哪里得到这个错误。 我知道它可能是双重删除或类似的东西。 对于背景,这是huffman树的一个实现,你可以在维基百科上轻松实现。 CharCountNode类实现 int main() { ifstream input; input.open(“input.txt”); MinPriorityQueue heap; map m; while(input.good()) m[input.get()] += 1; for( map::const_iterator it = m.begin(); it != m.end(); ++it ) heap.enqueue(CharCountNode(it->first, it->second)); while(heap.getSize() > 1) { CharCountNode a, b, parent; a = heap.dequeue(); b = heap.dequeue(); parent = CharCountNode(‘*’, a.getCount() + b.getCount()); parent.left = &a; parent.right = […]

C Windows – 内存映射文件 – 共享结构中的动态数组

我正在尝试共享类似于以下示例的结构: typedef struct { int *a; int b; int c; } example; 我试图在进程之间共享这个结构,我发现的问题是当我用malloc初始化’a’时,我将无法从第二个进程中访问该数组。 是否可以将此动态数组添加到内存映射文件中?

动态添加到未知大小的char数组

我目前正在进行一项任务,我必须从每个文件中一次一个字符串提取文本,然后将它们连接起来并打印出来。 我找到了一种方法来提取我的角色并将其保存在变量广告中。 如何将这些char添加到我的char数组中以打印到最后? 我最初将它malloc到一个char的大小,并在每个if语句我realloc。 我在网上找到的所有指南都建议我使用strcat,但我无法传递广告变量来追加。 我该如何解决这个问题? #include #include #include #include #include pthread_mutex_t thread1; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; char *output; void* processing(void* file) { FILE *test = fopen(“drive1.data”, “r”); FILE *drive1 = fopen(“drive1.data”, “r”); FILE *drive2 = fopen(“drive2.data”, “r”); FILE *drive3 = fopen(“drive3.data”, “r”); FILE *drive4 = fopen(“drive4.data”, “r”); FILE *drive5 = fopen(“drive5.data”, “r”); int c, […]

定制malloc用于许多小型固定大小的块?

我需要分配,并释放大量固定大小的小(16字节)内存块,没有固定的顺序。 我可以为每个调用malloc和free,但这可能效率很低。 一个更好的解决方案可能是调用malloc并释放更大的块,并处理这些块本身的分配。 问题是,如何最好地做到这一点? 这似乎不应该是一个非常不寻常的问题或罕见的问题,它应该已经“解决”,但我似乎找不到任何东西。 有什么指针吗? 为了澄清,我知道内存池库,什么不存在,但这些也需要一个大小参数。 如果大小是恒定的,那么可以使用更高效算法的不同选项,这些是否有任何实现?

为什么free()只将8个第一个字节设置为零?

我有一个关于free()行为的问题。 Juste一个使用malloc和strcpy char *的简单代码。 所以,所有都是在HEAP上设置的: (gdb) x/100b 0x602010 0x602010: 66 111 110 106 111 117 114 32 0x602018: 116 111 117 116 32 108 101 32 0x602020: 109 111 110 100 101 0 0 0 0x602028: 0 0 0 0 0 0 0 0 0x602030: 0 0 0 0 0 0 0 0 0x602038: 33 […]

malloc返回的内存地址是否总是可以通过指向另一种类型的指针互换?

char arr[512] = {0}; int *ptr = (int *)arr; // WRONG // A bus error can be caused by unaligned memory access printf(“%d\n”, *ptr); 另一方面: malloc为您提供的块保证对齐,以便它可以保存任何类型的数据。 char *arr= malloc(512); int *ptr = (int *)arr; // OK, arr is properly aligned for ptr memset(arr, 0, 512); printf(“%d\n”, *ptr); 这个假设是正确的还是我错过了什么?

修改2D Array的malloc策略,使malloc成功

我们最近收到一份报告,说我们的应用程序偶尔会无法运行。 我将问题代码跟踪到这个: struct ARRAY2D { long[] col; } int numRows = 800000; int numCols = 300; array = (ARRAY2D*) malloc(numRows * numCols * sizeof(long)) 如果用户没有足够大的空闲块,则此800 Mb的分配可能会失败。 改变我分配内存的最佳方法是什么? 请记住,我有大量代码访问此对象,如下所示:array [row] .col [colNum],所以我需要一些需要辅助或主要查找和替换数组访问代码编辑的东西。

为什么malloc(1)用于存储4字节整数?

根据我的理解,malloc(x)返回一个x字节长的内存块。 所以要存储一个4字节的整数,我会这样做: int *p = (int *)malloc(4); *p = 100; 因为sizeof(int)为我返回4。 但是,如果我这样做: int *p = (int *)malloc(1); *p = 100; 它似乎工作完全相同,没有存储值的问题。 为什么malloc()请求的内存量似乎不重要? 4字节整数不应该需要malloc(4)吗?

将命令行参数复制到数组中

对于一个程序,我想使用malloc()通过命令行发送的参数的数组副本。 因此,例如,如果我执行./a.out一两三,我想要一个带有{a.out,one,two,3}的数组。 但是,我有一些问题让我的程序工作。 这就是我所拥有的: static char** duplicateArgv(int argc, char **argv) { char *array; int j = 0; // First allocate overall array with each element of char* array = malloc(sizeof(char*) * argc); int i; // For each element allocate the amount of space for the number of chars in each argument for(i = 1; i […]

“释放的指针未被分配”内存块由于某种原因不会解除分配

我很难找到为什么我不能释放内存块。 指针必定有问题。 用于结构的存储器块在函数中进行,并且所使用的指针存储在数组中。 稍后,从数组中取出指针以释放内存。 我已经弄清楚它是免费的。 我把“//这一个”放在旁边。 #include typedef enum { INT = 0, FLOAT = 1, STRING = 2, NONE = 3, BOOL = 4 } TYPE; typedef struct { TYPE type; void * data; } Variable; typedef Variable ** var; //Convenience typedef for pointer to variable pointer typedef struct { size_t size; Variable *** […]