相关疑难解决方法(0)

在GCC中对齐malloc()?

GCC或glibc中是否有任何标准化函数在对齐指针处分配内存块?像MSVC中的_align_malloc()一样?

c malloc gcc

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

malloc和HeapAlloc之间是否存在根本区别(除了可移植性)?

我有代码,由于各种原因,我正在尝试从C运行时移植到使用Windows Heap API的代码.我遇到了一个问题:如果我重定向malloc/ calloc/ realloc/ free调用HeapAlloc/ HeapReAlloc/ HeapFree(使用GetProcessHeap的手柄),内存似乎是正确分配(无不良指针返回,没有抛出异常),但我的图书馆porting因某种原因说"未能分配内存".

我已尝试使用Microsoft CRT(使用下面的Heap API)和另一个公司的运行时库(使用下面的Global Memory API); 两者的malloc适用于库,但由于某些原因,直接使用Heap API不起作用.

我已经检查过分配不是太大(> = 0x7FFF8字节),而它们不是.

我能想到的唯一问题是内存对齐; 那是这样吗?或者除此之外,Heap API和我不知道的CRT内存API有根本区别吗?

如果是这样,它是什么?如果没有,那么为什么静态 Microsoft CRT(包含在Visual Studio中)在调用之前malloc/ calloc之前需要一些额外的步骤HeapAlloc?我怀疑存在差异,但我想不出它可能是什么.

谢谢!

heap malloc winapi msvcrt heapalloc

7
推荐指数
1
解决办法
2728
查看次数

我可以通过引用偏移指针来释放()吗?

可能重复:
传递给free()的指针是否必须指向内存块的开头,还是指向内部?

我正在使用堆在堆上分配一些内存malloc().我正在向指针添加一个偏移量并将其返回到一个调用函数return ptr+(sizeof(char)*4)),例如,该函数存储该返回值ptrReturned.

最大的问题是,当我free(ptrReturned)从分配块的开头偏移时,是否sizeof(char)*4会释放整个块,还是从偏移中释放内存直到分配块的末尾?我正在使用的编译器是MSVC++ 2008.

如果分配的地址存储在链表中,并且有指向前一项的指针,那么它应该将整个块从前一个指针为NULL的位置释放到下一个指针为NULL的位置,对吧?

我已经尝试过调试和观察内存,但我无法覆盖释放的块空间.有没有办法可以在定义的地址上显式尝试和分配堆上的空间,并且可能因尝试分配已分配的内存而获得异常?这样我就能知道,如果有的话,当然没有更简单的答案.

我希望问题很清楚,如果我遗漏了一些信息,请在评论中告诉我.谢谢.

c heap malloc free memory-management

3
推荐指数
1
解决办法
865
查看次数

C中的动态内存分配

我只是在c语言上试验一下你能回答我关于我写的程序的问题

void main()
{
    char *p,; // created a  pointer pointing to string
    p = (char *) malloc(50); // dynamically create 50 bytes.
    strcpy(p, "this code is written about the dynamic allocation");
    p += 20;
    free(p);
}
Run Code Online (Sandbox Code Playgroud)

现在有人能告诉我free(p)语句的效果是什么,将释放最后30个字节并用于将来的内存分配.什么是输出?

c free pointers

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

标签 统计

c ×3

malloc ×3

free ×2

heap ×2

gcc ×1

heapalloc ×1

memory-management ×1

msvcrt ×1

pointers ×1

winapi ×1