Tag: malloc

free()如何知道释放多少内存?

可能重复: C编程:免费如何知道免费多少? 在C语言编程时,我经常使用malloc()来分配内存, free()来释放它: MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); /** Do stuff **/ free(objArr); free()如何知道释放多少内存? malloc()是否在某处创建了一个表来记住指针以及每个指针指向的内存量是多少? 如果是这种情况,如果重命名指针, free()会失败吗? 例如: MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); MyObject* newPtr= objArr; free(newPtr); /** Does this fail? **/ 如果我增加指针然后运行free()会发生什么? 例如: MyObject* objArr= (MyObject*) malloc(sizeof(MyObject)*numberOfObjects); newPtr++; free(newPtr); /** What happens now? **/ 它会在原始数组的末尾解除分配一块额外的内存吗?

动态分配结构中的结构

我正在动态分配一个结构,该结构具有不同的结构作为成员: struct a { // other members struct b; } struct b基本上包含指向另一个struct b的指针,因此将struct b视为链表。 如果我动态分配struct a ,那么它也会在其中生成一个新的struct b 。 但是,执行该操作或使struct a具有指向struct b的指针,并在struct a动态分配struct b之间的区别是什么? 实施有什么区别?

检测到glibc,realloc():指针无效

我为冗长的代码道歉。 我有一个简单的问题,但我认为我包含了我的代码,所以我很清楚我来自哪里。 我得到了realloc腐败。 我认为腐败是因为我没有正确解放。 实际上我不确定glibc甚至说或意味着什么。 任何人都能简单地向我解释一下吗? 再次抱歉冗长的代码。 #include “draw2.h” #include “draw2a.h” #include “draw2b.h” const char Exec_c[] = “java -jar Sketchpad.jar”; void parseFile(FILE * fp, FILE *sketcher){ char line [MAX_WORD] = {“NULL”}; char word [MAX_WORD] = {“NULL”}; char figureName [MAX_WORD] = {“NULL”}; struct figure *pointsAndname; long int countNumberoffigures = 0; printOutput(); long int temp = 10; […]

如果malloc失败怎么办?

如果malloc分配失败,我们应该再试一次吗? 在这样的事情: char* mystrdup(const char *s) { char *ab = NULL; while(ab == NULL) { ab=(char*)malloc(strlen(s)+1); } strcpy(ab, s); return ab; } while循环对检查内存分配有效吗?

alloc,malloc和alloca – 有什么区别?

我的印象是Objective-C中的alloc (当我们调用[anyObject alloc]实际上是在实现C函数malloc并且内存在堆中分配,但无法找到答案)。 此外,在搜索alloc ,我发现alloca在堆栈中分配内存。 如果我没有错, alloc在堆中分配内存来创建对象。 那么, alloc和malloc (和alloca )有什么区别? 任何人都可以总结一下吗?

calloc v / s malloc和时间效率

我饶有兴趣地阅读了malloc和calloc之间的C后差异 。 我在我的代码中使用了malloc,想知道我将使用calloc有什么区别。 我目前的(伪)代码与malloc: 情景1 int main() { allocate large arrays with malloc INITIALIZE ALL ARRAY ELEMENTS TO ZERO for loop //say 1000 times do something and write results to arrays end for loop FREE ARRAYS with free command } //end main 如果我使用calloc而不是malloc,那么我将: Scenario2 int main() { for loop //say 1000 times ALLOCATION OF ARRAYS […]

使用C中的字符指针为结构分配内存

我今天很难修复代码,然后我遇到类似的东西: typedef struct { int a; int b; int c; int d; char* word; } mystruct; int main(int argc, char **argv){ mystruct* structptr = malloc(sizeof(mystruct)); if (structptr==NULL) { printf(“ERROR!”) … } … free(structptr); return 0; } 由于char* word是一个可变长度的字符串,而且malloc没有为它分配足够的内存,因此代码提供了大量的内存错误。 实际上它只为整个struct分配了20 Bytes 。 有没有解决这个问题的方法,而不是将char*变成像char word[50] ?

GNU调试器的GUI

我非常兴奋使用GNU调试器和一个名为Insight的GUI,因为它为我节省了很多时间。 因此,我在其他新手那里发布这个问题/答案,就像我在他们的C代码中遇到问题,寻找可视方式来查看正在发生的事情。 我正在研究Linux Mint(Ubuntu)btw。

固定大小缓冲区的malloc实现

我需要一个使用一个大的固定大小缓冲区的通用malloc实现。 与SQLite的“ Zero-malloc内存分配器 ”类似的东西。 你知道任何这样的实现吗? 它应该重量轻,便于携带,可用于嵌入式应用。 提前致谢。

为什么malloc内存在一个函数中并将其释放到外面是一个坏主意?

如果这是一个坏主意,如何在函数中分配内存?