Tag: malloc

我如何获得使用malloc()分配的内存块的大小?

可能重复: 我怎样才能从C中的指针获取数组的大小? 有没有什么办法来以编程方式确定一个C ++数组的大小? 如果没有,为什么? 我从C风格函数中得到一个分配内存块的指针。 现在,对于debugging目的来说,知道这个指针指向的分配的内存块有多大是非常有趣的。 有没有什么比盲目超越边界挑衅exception更优雅? 在此先感谢,安德烈亚斯 编辑: 我在Windows上使用VC ++ 2005,在Linux上使用GCC 4.3 EDIT2: 我在VC + + 2005下_msize不幸的是,它在debugging模式下导致一个exception…. EDIT3: 好。 我已经尝试过上面描述的例外情况,并且它工作正常。 至less在我debugging的时候,确保在调用库之后立即退出缓冲区边界。 奇迹般有效。 它只是不够优雅,并不适用于生产代码。

我可以依靠malloc返回NULL吗?

我在Unix系统上读到,即使内存实际上不可用, malloc也可以返回一个非NULL指针,稍后尝试使用内存将触发一个错误。 由于我不能通过检查NULL来捕捉这样的错误,我想知道检查NULL是多么的有用吗? 在一个相关的说明中,Herb Sutter说,处理C ++内存错误是徒劳的,因为在实际发生exception之前,系统就会进入分页的痉挛状态。 这也适用于malloc吗?

sprintf()与自动内存分配?

我正在寻找一个sprintf() – 类似于自动分配所需内存的函数的实现。 所以我想说 char* my_str = dynamic_sprintf( "Hello %s, this is a %.*s nice %05d string", a, b, c, d ); 并且my_str检索保存了sprintf()结果的分配内存的地址。 在另一个论坛上,我读到这样可以解决这个问题: #include <stdlib.h> #include <stdio.h> #include <string.h> int main() { char* ret; char* a = "Hello"; char* b = "World"; int c = 123; int numbytes; numbytes = sprintf( (char*)NULL, "%s %d […]

内存分配的时间复杂度

使用new,malloc等dynamic内存分配的时间复杂度是多less? 我对于如何实现内存分配器知之甚less,但我认为答案在于实现。 因此,请回答一些更常见的情况/实施。 编辑:我依稀记得在最坏的情况下堆分配是无限的,但我真正感兴趣的平均/典型的情况。

C ++中的“new”和“malloc”和“calloc”有什么区别?

“新”,“malloc”和“calloc”等家族的区别是什么? (什么时候)需要“新”以外的东西吗? 其中一个使用其他吗?

什么是内存堆?

什么是内存堆?

内置函数“malloc”的不兼容隐式声明

我得到这个错误: warning: incompatible implicit declaration of built-in function 'malloc' 试图做到这一点: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); 仅供参考,手头使用的结构是: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t fileblock; } fileinfo_list; 我没有看到我所做的事情有什么问题? 我只是创build一个大小为1 x fileinfo_list的tempList 。

如何findmalloc“double free”错误的原因?

我在Objective-C中编写一个应用程序,我得到这个错误: MyApp(2121,0xb0185000)malloc:***错误对象0x1068310:双倍空闲 ***在malloc_error_break中设置一个断点来进行debugging 这是发生在我释放一个NSAutoreleasePool时,我无法弄清楚我释放两次什么对象。 我如何设置他的断点? 有没有办法知道这是什么“对象0x1068310”?

alignmentmalloc()在海湾合作委员会?

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

免费字符*:无效的下一个大小(快)

在连接过程之后,我释放了char *。 但是我收到这个错误: 免费():无效的下一个大小(快):0x0000000001b86170 以下是我的代码: void concat(stringList *list) { char *res = (char*)malloc(sizeof(char*)); strcpy(res, list->head->string); list->tmp = list->head->next; while (list->tmp != NULL) { strcat(res, ","); strcat(res, list->tmp->string); list->tmp = list->tmp->next; } printf("%s\n", res); free(res); }