Tag: malloc

在c中分配内存并保存字符串

我想知道为什么以下代码不起作用 int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); test = “testingonly”; free(test); } 在考虑之后,我的假设是首先在内存中为12个字符分配空间,但是下一行中的赋值在堆栈上创建一个char数组,并将其内存地址传递给test。 所以free()尝试释放堆栈上不允许的空间。 那是对的吗? 那么在堆上保存字符串的正确方法是什么? 以下是一种常见的方式吗? int main(int argc, char **argv) { char *test = (char*) malloc(12*sizeof(char)); strcpy(test, “testingonly”); free(test); }

处理“内存不足”的正确方法是什么?

最近,我在Windows上制作了一个CCTV节目的video播放器程序。 由于程序必须同时解码和播放许多video流,我认为它可能会遇到malloc失败的情况,并且我在每个malloc之后添加检查。 但一般来说,在我在开源项目中阅读的这些开源程序代码中,我很少发现对malloc结果的任何检查。 所以当malloc失败时,大多数程序都会崩溃。 那不是不接受吗? 我在linux上编写服务器程序的同事会为100个客户端连接分配足够的内存。 因此,虽然他的程序可能会拒绝101客户端,但它永远不会遇到malloc的失败。 他的方法是否也适合桌面应用程序?

fprintf是否在引擎盖下使用malloc()?

我想要一个最小的o-damn-malloc-just-failed处理程序,它将一些信息写入文件(可能只是标准错误)。 我更喜欢使用fprintf()而不是write(),但是如果fprintf()本身尝试使用malloc(),这将很难失败。 是否有一些保证,无论是在C标准中,还是只是在glibc中,fprintf都不会这样做?

malloc 2Darrays的另一种方式?

我想使用malloc声明一个2d数组。 在互联网上查找时,所有网站都会声明一个int **指针,然后使用malloc首先将各个指针分配给1d数组,然后再次使用malloc为单个int分配空间。 我怀疑的是,以这种方式声明的数组不会将其元素保存在连续的内存地址中。 以下方式仅使用一个malloc语句并动态分配2d数组,并且所有地址都是连续的。 所以不应该以下是动态分配2d数组的正确方法吗? #include int main(){ int (*p)[2] = malloc(3 * sizeof *p); int i; int j; //All addresses printed here are contiguous for(i=0; i<3; i++){ for(j=0; j<2; j++){ printf("%d\t", &p[i][j]); } printf("\n"); } }

我可以假设用较小的大小调用realloc会释放余数吗?

让我们考虑一下非常简短的代码片段: #include int main() { char* a = malloc(20000); char* b = realloc(a, 5); free(b); return 0; } 在阅读了realloc的手册页后,我不完全确定第二行会导致释放19995个额外字节。 引用手册页: The realloc() function changes the size of the memory block pointed to by ptr to size bytes. ,但根据这个定义,我可以确定其余的将被释放吗? 我的意思是, b指向的块当然包含5个空闲字节,所以对于懒惰的顺从分配器是否足以为realloc行做什么? 注意:我使用的分配器似乎释放了19 995个额外字节,如valgrind在注释掉free(b)行时所示: ==4457== HEAP SUMMARY: ==4457== in use at exit: 5 bytes in 1 blocks […]

使用Malloc Hooks

我试图使用malloc钩子来创建自定义函数my_malloc()。 在我的主程序中,当我调用malloc()时,我希望它调用my_malloc()可以有人请给我一个如何在C中执行此操作的示例

我们应该检查内存分配是否失败?

我已经看到很多代码在进行分配时检查NULL指针。 这使代码变得冗长,如果没有一致地完成,只有当程序员感觉到它时,甚至不能确保程序在地址空间用完时不会崩溃。 此外,如果程序无法进行更多分配,那么它无论如何都无法完成其function,对吧? 所以我的问题是,对于大多数程序来说,根本不检查并且如果内存耗尽就让程序崩溃是不是更好? 至少代码更具可读性。 注意 我说的是在现代计算机上运行的桌面应用程序(至少2 GB的地址空间),而且绝对不会运行航天飞机,生命支持系统或BP的石油平台。 最重要的是,我在谈论使用malloc但从未真正超过5 MB内存使用量的程序。

C – 设计你自己的free()函数

今天,我出现在面试中,面试官问我这个, 告诉我你将如何设计自己的free( )函数来解除分配内存的步骤。 它如何比C的默认free()函数更有效? 你能得出什么结论? 我很困惑,想不出设计的方式。 你们觉得怎么样 ? 编辑:因为我们需要知道malloc()如何工作,你能告诉我编写自己的malloc()函数的步骤

Malloc分配的内存多于RAM

我刚刚在一台12 MB的机器上执行了一个mallocs 13 MB的程序(QEMU Emulated!)。 不仅如此,我甚至浏览了记忆并填充了垃圾…… void large_mem(void) { #define LONGMEM 13631488 long long *ptr = (long long *)malloc(LONGMEM); long long i; if(!ptr) { printf(“%s(): array allocation of size %lld failed.\n”,__func__,LONGMEM); ASSERT(0); } for(i = 0 ; i < LONGMEM ; i++ ) { *(ptr+i)=i; } free(ptr); } 这怎么可能 ? 我期待一个分段错误。

在realloc()之前需要malloc()吗?

因为我读过realloc将作为malloc,如果指向的大小是0,我使用它没有malloc(),只要指针是静态的,全局的,或者如果是自动的话显式设置为NULL。 但是,我注意到很多程序员试图设置它或将其设置为malloc(1)。 需要它吗?