Tag: realloc

使用realloc调整缓冲区大小

如果指向的区域被移动,则完成自由(ptr)。 你能解释一下关于realloc()的上述内容吗? 这一行来自calloc,malloc,realloc和free的手册页。

realloc()无效的旧大小

我正在从KandR C编程书中做一些有趣的练习。 该程序用于从用户输入的一组行中查找最长行,然后打印它。 这是我写的(部分,部分内容直接取自本书): – #include #include int MAXLINE = 10; int INCREMENT = 10; void copy(char longest[], char line[]){ int i=0; while((longest[i] = line[i]) != ‘\0′){ ++i; } } int _getline(char s[]){ int i,c; for(i=0; ((c=getchar())!=EOF && c!=’\n’); i++){ if(i == MAXLINE – 1){ s = (char*)realloc(s,MAXLINE + INCREMENT); if(s == NULL){ printf(“%s”,”Unable to […]

检测到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; […]

重新分配NULL值(或未定义)指针

我正在读关于realloc并且对那里提到的一点感到困惑。 考虑以下代码: #include #include int main () { int* ptr = NULL; ptr = realloc(ptr, 10*sizeof(int)); return 0; } 使用最初为NULL值的ptr分配带realloc内存是否有任何危险? 如果不是: int* ptr = NULL; 我有这个: int* ptr; // no value given to ptr 使用ptr调用realloc会有问题吗?

重新分配后,我们是否会在缓冲区中丢失数据?

我很难理解realloc是如何工作的。 如果我malloc’ed缓冲区并将数据复制到该缓冲区,让我们说“AB”: +————+ | A | B | \0 | +————+ 然后我重新分配了缓冲区,数据中是否会丢失(甚至是单个字节)? 或者只是扩展缓冲区? : +————————+ | A | B | \0 | ? | ? | ? | +————————+ 码: #include #include #include int main(void){ char* buffer = (char*) malloc( sizeof(char) * 3 ); strncpy(buffer, “AB”, 2); buffer = (char*) realloc(buffer, sizeof(char) * 6); /* […]

realloc和malloc函数

看看代码: #include #include void main() { int *p; p = malloc(6); p = realloc(p, 10); if (p == NULL) { printf(“error”); exit(1); } } 以此示例为代码,假设总内存为10个字节,并且通过malloc函数指定类型为int和ohter 6字节的声明使用2个字节,剩余的2个字节被其他程序占用,现在当我运行realloc函数时为了扩展指针指向的内存,它将在内存中搜索10个字节,当它不可用时,它从堆区域分配10个字节的内存并复制malloc的内容并将其粘贴到堆区域中的新分配的内存区域中。然后删除存储在malloc中的内存吧? realloc()是否返回NULL指针,因为内存不可用? 没有权利!? 它确实进入堆区域进行内存分配吗? 它不会返回NULL指针吗?

具有C语言function的realloc结构

我的C程序崩溃了,我太新了,无法弄明白。 到目前为止它非常简单,我想代码足以弄清楚出了什么问题。 我只是想逐行读取文件。 一旦我内存不足,我会将结构的内存加倍。 如果这还不够,我会提供您需要的任何其他信息。 非常感谢您的帮助,因为我已经被困了好几个小时了。 /* John Maynard 1000916794 7/15/2013 HW-06 */ #include #include #include #define N 100 struct course { char subject[11]; int catalogNum; int sectionNum; int enrollmentTotal; int enrollmentCap; }; void readFile(struct course *d, char* filename); void double_array_size(struct course *d, int new_size); int main(void) { char *filename = “hw06-data.csv”; struct course *d; […]

多个realloc比巨大的malloc更昂贵吗?

我使用动态数组来表示最小堆。 有一个循环可以删除最小值,并将随机元素添加到最小堆中,直到出现某种情况。 虽然我不知道堆的长度在运行时会如何变化(有很多随机性),但我知道上限,即1000万。 我有两个选择: 1)使用malloc声明一个小数组,然后当堆中的元素数量超过长度时调用realloc。 2)使用malloc声明一个1000万条目数组。 这避免了调用realloc。 题 选项2比选项1更有效吗? 我用我的代码测试了这个,并且使用2似乎有显着的(20%)运行时间减少。这是因为代码中的随机性而估计的。 使用malloc预先声明一个大型的10-50万个入口arrays有什么缺点吗?

正确使用Realloc

这是我被教导使用realloc() : int *a = malloc(10); a = realloc(a, 100); // Why do we do “a = …. ?” if(a == NULL) //Deal with problem….. 这不是多余的吗? 我不能这样做吗? : if(realloc(a, 100) == NULL) //Deal with the problem 我发现的其他realloc示例也是如此,例如: int *oldPtr = malloc(10); int * newPtr = realloc(oldPtr, 100); if(newPtr == NULL) //deal with problems else oldPtr […]

在realloc之后使用原始指针?

我正在阅读Richard Reese的新书(2013年5月)O’Reilly的书“理解和使用C指针”,我对其中的一些代码有疑问,第87页。 if (++length > maximumLength) { char *newBuffer = realloc (buffer, maximumLength += sizeIncrement); if (newBuffer == NULL) { free (buffer); return NULL; } currentPosition = newBuffer + (currentPosition – buffer); buffer = newBuffer; } 我希望变量的名称是不言自明的; 如果需要上下文,我将编辑以提供整个代码块而不仅仅是这个摘录。 我的问题是关于行currentPosition = newBuffer + (currentPosition – buffer); 。 我对realloc()理解是,当新分配成功时,最初分配的内存被释放。 如果这是正确的,那么有问题的线是使用悬空指针,不是吗? 该表达式的RHS上的buffer和currentPosition都是指向已释放的内存的指针。 我的直觉是重写这个以避免使用悬挂指针通过使用length ,毕竟已经存在。 我想用以下代码替换最后两行: buffer = newBuffer; […]