Tag: realloc

使用realloc来连接字符串

我试图连接两个字符串,假设“dest”字符串没有足够的空间来添加另一个字符串,所以我使用动态数组来解决它。 尝试编译代码时出现问题是mremap_chunk错误。 我不知道我错过了什么,因为realloc调用有所有正确的参数。 错误: malloc.c:2869: mremap_chunk: Assertion `((size + offset) & (GLRO (dl_pagesize) – 1)) == 0′ failed. Aborted (core dumped) #include #include #include char *strcatt(char *s1, char *s2) { int a = strlen(s1); int b = strlen(s2); int i, size_ab = a+b; s1 = (char *) realloc (s1, size_ab*sizeof(char)); for(i=0; i<b; i++) { s1[i+a]=s2[i]; […]

在C中重新分配双2D数组

我写了一个函数,它应该为每个输入重新分配数组。 我认为这个function运行良好,但是当我尝试使用数组时,我得到了分段错误。 输入: [1,2] [6,3] [2.5,3.5] 我必须检查用户是否以正确的forms'[‘ number ‘,’ number ‘]’输入输入。 我必须至少有2个条目。 输入的结尾不是新行,而是EOF( CTRL + D或CTRL + Z )。 我的代码: double ** allocation (double ** field, int i) { double x = 0, y = 0; char obr[1], cbr[1], col[1]; while (scanf(“%c%lf%c%lf%c”, &obr, &x, &col, &y, &cbr) == 5) { if (col[0] != ‘,’ || […]

我应该如何malloc / realloc与包含数组的结构?

我对c很新,所以如果我的步骤有误,请告诉我。 假设我有以下内容: struct graphNode{ int val; graphNode* parent; int succSize; int succMaxSize; graphNode* succ[1]; }; 我将创建一个新节点: graphNode *n; n = malloc(sizeof(struct graphNode)); assert(n); n->val = 1; n->parent = NULL; n->succSize = 0; n->succMaxSize = 1; 然后,如果我想向节点添加后继 if (n->succSize == n->succMaxSize){ n->succ = realloc(n->succ, sizeof(graphNode*) * n->succMaxSize * 2); n->succMaxSize *= 2; } n->succ[succSize] = n2; […]

Realloc和sscanf成为一个函数

我有一个有num行的文件:每行包含一个数字。 我想将每个数字保存到矢量*vet 。 为什么这段代码不起作用? Segmentation fault (core dumped) 我认为错误是save_numbers函数中的sscanf ,但我不知道为什么。 #include #include /* This function allocate memory and save numbers into a vector */ int save_numbers (int **vet, int *num) { FILE *fin; int i = 0; char buff[10]; if ( !(fin = fopen(“numbers.dat”, “r”)) ) return 1; while ( fgets(buff, sizeof(buff), fin) ) { […]

重新分配成一个函数

我的问题是’realloc’。 以下代码正常工作(没有警告): #include #include int main () { int num=10; int *vet; int i; for (i=0; i<num; i++) { /* allocate memory of vet to contains (i+1) int */ vet = (int*) realloc ( vet, (i+1) * sizeof(int) ); /* write numbers in the allocated memory */ vet[i] = 321 + i; } /* print […]

为什么在没有数据复制的情况下,像realloc()这样的标准C库中没有函数?

例如,我想要这样一个function: char *dst = (char*)malloc(512); char *src = (char*)malloc(1024); … dst = (char*)realloc(dst, 1024); memcpy(dst, src, 1024); 如您所见,我只想让函数realloc()扩展缓冲区的大小,但C库中的realloc()可能会复制旧地址中的数据。 那么在我想要的任何库中都有一个函数吗?

如果我重新分配并且新大小为0会发生什么?这相当于免费吗?

给出以下代码: int *a = NULL; a = calloc(1, sizeof(*a)); printf(“%d\n”, a); a = realloc(a, 0); printf(“%d\n”, a); return (0); 它返回: 4078904 0 这个realloc是免费的吗? 注意:我在WindowsXP下使用MinGW。

realloc调用引入了多少开销?

我在for循环的每次迭代中使用realloc ,迭代次数超过10000次。 这是一个好习惯吗? 如果多次调用realloc会导致错误吗?

在函数内部使用realloc扩展数组 – 指针?

我确信答案就是我不能正确理解指针和参考! 所以在我的C文件的开头我为人们定义了一个结构: typedef struct { char id[4]; int age; char name[128]; } people; 然后在main()内部创建一个由10 个人组成的数组,称为记录 。 people* record = (people*)malloc(sizeof(people)* 10); 在main()中我们开始然后潜入一个函数 MyFunction(record); (此函数在main()之前的C文件的开头具有原型 int MyFunction(people *record); 在MyFunction()内部,我们做了各种各样的事情,包括想要增加记录数组的大小,以便它可以容纳更多的人结构。 我试图增加记录数组大小 struct people *tmp = realloc(record, 20 * sizeof (people)); if (tmp) { record = tmp; } 但是这不起作用,如果我尝试在数组中使用新添加的结构,则会导致内存损坏。 正如我所说,我确信这是因为我没有正确地低估指针和参考。 请注意,我不能让MyFunction()将扩展记录数组作为其返回类型,因为我已经将其返回int用于其他内容(我不确定我是否也能正常工作!) -我需要它使用主记录数组。 有人能指出我正确的方向吗?

由C11 aligned_alloc分配的内存重新分配是否保持对齐?

请考虑以下(C11)代码: void *ptr = aligned_alloc(4096, 4096); … // do something with ‘ptr’ ptr = realloc(ptr, 6000); 由于ptr指向的内存与aligned_alloc有一个4096字节的对齐,它(读取:是否保证)在(成功)调用realloc之后保持该对齐? 或者内存可以恢复为默认对齐方式?