Tag: malloc

malloc和scanf字符串

下面用malloc和scanf和%s得到一个字符串的简单程序如下所示,给出了一个我无法理解的输出。 虽然我’malloced’只有5个字节,但我的输入字符串已超过上述大小但没有分段错误。 scanf是否覆盖了malloc分配? #include #include #include int main() { char * name; int SZSTRING; printf(“Enter size of name :”); scanf(“%d”, &SZSTRING); name = (char*) malloc ((SZSTRING + 1) * sizeof(char)); printf(“Enter name :”); scanf(“%s”, name); printf(“len of ‘name’ : %d\n”,strlen(name)); printf(“name final: \”%s\”\n”,name); free(name); return 0; } Output: OptiPlex-380:~/gsa/compile$ gcc -o try try.c OptiPlex-380:~/gsa/compile$ ./try […]

sYSMALLOc:断言失败 – 任何想法如何有效调试?

我的服务器守护程序在大多数计算机上工作正常但是我得到的一个: malloc.c:3074: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) – 1) * 2])) – __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) – 1)) & ~((2 * (sizeof(size_t))) – 1)))&& ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)’ failed. gdb回溯: […]

什么导致堆栈溢出?

您可能认为这是一个巧合,我的问题的主题类似于论坛的名称,但我实际上是通过谷歌搜索术语“堆栈溢出”。 我使用OPNET网络模拟器,我使用C进行编程。我认为我遇到了大数组大小的问题。 看来我正在达到某种内存分配限制。 它可能与OPNET,Windows,我的笔记本电脑内存或最有可能的C语言有关。 当我尝试使用具有数千个整数的元素总数的嵌套数组时,会导致该问题。 我认为我超出了整体内存分配限制,我想知道是否有办法增加这个上限。 这是确切的问题描述: 我基本上有一个路由表。 我们称之为routing_tbl [n],这意味着我支持30个节点(路由器)。 现在,对于此表中的每个节点,我保留信息。 大约有许多(数百个)可用路径,在一个名为paths [p]的数组中。 同样,对于此数组中的每个路径,我将属于它的节点列表保存在名为hops [h]的数组中。 所以,我至少使用了nph整数值的内存,但是这个表也包含其他信息。 在同一个函数中,我也使用另一个嵌套数组,它也消耗了近40,000个整数。 一旦我运行我的模拟,它就会退出抱怨堆栈溢出。 当我减少路由表的总大小时,它可以工作。 您认为导致问题的原因是什么?如何解决? 非常感谢阿里

有没有理由在PyMem_Malloc上使用malloc?

我正在阅读Python C扩展中的内存管理文档,据我所知,似乎没有太多理由使用malloc而不是PyMem_Malloc 。 假设我想分配一个不会暴露给Python源代码的数组,并将存储在一个将被垃圾回收的对象中。 有没有理由使用malloc ?

Malloc – >分配了多少内存?

# include # include # include # include int main () { char * buffer; buffer = malloc (2); if (buffer == NULL){ printf(“big errors”); } strcpy(buffer, “hello”); printf(“buffer is %s\n”, buffer); free(buffer); return 0; } 我为指针/ char buffer分配了2个字节的内存,但是如果我为它分配C风格的字符串hello ,它仍会打印整个字符串,而不会给我任何错误。 为什么编译器没有给我一个错误,告诉我没有足够的内存分配? 我读了几个问题,询问如何检查malloc实际分配的内存量,但我没有找到具体的答案。 free函数不应该确切地知道buffer分配了多少内存吗?

检查某些东西是否已被malloced

给定一个变量的指针..有没有办法检查它是静态还是动态分配?

我应该在exception终止时释放分配的内存吗?

我的程序(文本模式Web浏览器)动态分配内存。 当然,我在运行时释放不需要的块。 并且我在正常终止之前释放所有内容 – 因此内存泄漏检查器不会给我误报(并且如果需要重大重构则要灵活)。 现在,我不做的是在exception终止之前释放内存。 (目前,我的程序在信号和mallocs / reallocs失败后终止。) 我的问题是:你认为这种不好的风格吗? 我应该在exception终止时免费吗?

在动态分配的2Darrays上使用realloc()是个好主意吗?

我主要对缩小这样一个数组的可行性感兴趣。 我正在开发一个项目,我在其中使用单个malloc()调用来创建各个中等大小的2D数组。 (每个只有几十个MiB,最大的。)事情是,在其中一个arrays的生命周期中,其内容大小缩小(超过一半)。 显然,我可以在程序的生命周期中单独保留数组大小。 (它只有一个具有GiB RAM的系统上的x MiB。)但是,我们正在谈论超过一半的分配空间在程序终止之前就被废弃了,并且,由于我使用的方式的性质数组中,所有幸存数据都保存在一组连续的行中(在块的开头)。 如果我真的不需要它,那么抓住所有RAM似乎是浪费。 虽然我知道realloc()可用于缩小动态创建的数组,但2D数组​​更复杂。 我想我理解它的内存布局(因为我实现了构造它的函数),但这推动了我对语言及其编译器工作的理解的极限。 显然,我将不得不处理行(并处理行指针),而不仅仅是字节,但我不知道所有这些的结果是多么可预测。 并且,是的,我需要使用单个malloc()创建数组。 有问题的对象有几百万行。 我尝试分别使用一个循环到malloc()每一行,但程序总是冻结在大约100,000 malloc()s。 对于后台,我用来构造这些数组的源代码如下: char ** alloc_2d_arr(int cnum, int rnum) { /* ((bytes for row pointers + (bytes for data)) */ char **mtx = malloc(rnum * sizeof (char *) + rnum * cnum * sizeof (char)); /* Initialize each row pointer to the […]

禁用malloc中的随机性

我正在运行以下简单的C程序: #include #include int main(int argc, char** argv){ void *p = malloc(4); fprintf (stderr, “p==%p\n”, p); return 0; } 不同的运行给出不同的结果 p == 0x101c010 那么:p == 0x1ad9010 那么:p == 0xe77010 所以。 我记得,过去malloc是完全确定的。 所以可能从某个版本开始,malloc会添加一些随机性。 我现在在Ubuntu上使用gcc-4.6.3。 有没有办法消除这种随机性?

printf()是否在C中分配内存?

这个简单的方法只是创建一个动态大小为n的数组,并使用值0 … n-1对其进行初始化。 它包含一个错误,malloc()只分配n而不是sizeof(int)* n个字节: int *make_array(size_t n) { int *result = malloc(n); for (int i = 0; i < n; ++i) { //printf("%d", i); result[i] = i; } return result; } int main() { int *result = make_array(8); for (int i = 0; i < 8; ++i) { printf("%d ", result[i]); } free(result); } […]