Tag: 内存管理

在没有明显内存违规的情况下中止而不是段错误

在处理C字符串时,我遇到了这种奇怪的行为。 这是K&R书中的一个练习,我应该编写一个函数,将一个字符串附加到另一个字符串的末尾。 这显然要求目标字符串分配足够的内存,以便源字符串适合。 这是代码: /* strcat: Copies contents of source at the end of dest */ char *strcat(char *dest, const char* source) { char *d = dest; // Move to the end of dest while (*dest != ‘\0’) { dest++; } // *dest is now ‘\0’ while (*source != ‘\0’) { *dest++ = *source++; } […]

何时将内存分配给C中的局部变量

由于局部变量也称为自动变量,并且在访问函数时应该在运行时分配内存。 int main(){ int a; // declaration return 0; } int main(){ int a[]; // compilation error, array_size missing return 0; } int main(){ int a[2]; // declaration, but can’t work without array_size, // so at compile time it is checked! return 0; } 我的问题是,在C中声明中给出array_size是一个规则,还是在编译时为数组分配内存(仍然是本地变量) 它是如何工作的? 根据K&R的C编程,数组是一个变量。 第161号。

C中strncpy的内存混淆

本周我的同事讨论了一个关于记忆的问题: 示例代码1: int main() { #define Str “This is String.” char dest[1]; char buff[10]; strncpy(dest, Str, sizeof(Str)); printf(“Dest: %s\n”, dest); printf(“Buff: %s\n”, buff); } 输出: Dest: This is String. Buff: his is String. 示例代码2: int main() { #define Str “This is String.” char dest[1]; //char buff[10]; strncpy(dest, Str, sizeof(Str)); printf(“Dest: %s\n”, dest); //printf(“Buff: %s\n”, buff); […]

Swift中的免费C-malloc()内存?

我正在使用Swift编译器的Bridging Headerfunction来调用使用malloc()分配内存的C函数。 然后它返回一个指向该内存的指针。 函数原型是这样的: char *the_function(const char *); 在Swift中,我使用它: var ret = the_function((“something” as NSString).UTF8String) let val = String.fromCString(ret)! 原谅我对Swift的无知,但通常在C中,如果the_function()是malloc的内存并返回它,其他人需要在某个时候释放()它。 这是由Swift以某种方式处理还是我在这个例子中泄漏内存? 提前致谢。

char数组的内存分配

假设你有 – struct Person { char *name; int age; int height; int weight; }; 如果你这样做 – struct Person *who = malloc(sizeof(struct Person)); C如何知道为name变量分配多少内存,因为这可以容纳大量的数据/字符串? 我是C的新手并且对内存分配感到困惑。

为什么free()在释放之前没有将内存清零?

当我们在C中free()内存时,为什么那个内存没有填充零? 在调用free()时,有没有一种方法可以确保这种情况发生? 我宁愿不冒险将内存中的敏感数据释放回操作系统……

全局变量如$ _GLOBAL,$ _POST等存储在哪里?

当我参加面试时,面试官问我这个问题。 他们正在使用堆,堆栈等内存。我用Google搜索但我没有得到任何明确的答案。

将内存分配给char * C语言

这是为char *分配内存的正确方法吗? char* sides =”5″; char* tempSides; tempSides = (char*)malloc(strlen(inSides) * sizeof(char));

C中的内存池实现

我在C中寻找一个好的内存池实现。 它应该包括以下内容: 反碎片化。 超级快:) 能够在某个标识符下“捆绑”来自不同大小的多个分配,并删除具有给定标识符的所有分配。 线程安全

在C程序中为同一个指针调用’free’是否有任何伤害?

如果我有交流计划,比如: SomeTypePtr my_type; my_type = malloc(sizeof(someType)); /* do stuff */ free(my_type); /* do a bunch of more stuff */ free(my_type); 为my_type调用’free’会不会造成任何伤害? 在我调用free(my_type)之后,指针再次成为空指针吗?