Tag: realloc

用realloc缩小

我在这个问题中遇到了这段小代码,想知道, 当指向的内存空间缩小时, realloc()函数是否可以将内存块移动到另一个位置? int * a = malloc( 10*sizeof(int) ); int * b = realloc( a, 5*sizeof(int) ); 如果可能的话,在什么条件下,我可以期望b的地址与b中的地址不同吗?

realloc如何知道要复制多少?

realloc如何知道原始数据的大小? void *realloc(void *ptr, size_t size); 所以,如果实现是这样的: temp = malloc(size); memcpy(.. // How much to copy? free(ptr); return temp; 我意识到这不是最初的实现,并且realloc并不总是免费,但是当它发生时,它复制多少? 编辑:谢谢你的回答。 但是,如何在我的代码中使用malloc / free / ..实现realloc?

具有不同大小结构的struct数组的malloc()

如果每个struct包含一个大小不一的字符串数组,那么malloc如何正确地构造一个结构数组? 因此,每个结构可能具有不同的大小,并且无法实现 realloc(numberOfStructs * sizeof(structName)) 后 malloc(initialSize * sizeof(structName) 如何为此分配内存并跟踪发生的情况?

我可以假设用较小的大小调用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 […]

如果没有连续的内存空间,realloc会怎么做?

realloc用于动态重新分配内存。 假设我使用malloc函数分配了7个字节,现在我想将它扩展到30个字节。 如果内存中没有30个字节的顺序(连续单行)空间,后台会发生什么? 是否有任何错误或内存将被分配?

当realloc()失败并返回NULL时,它的正确用法是什么?

任何人都可以总结一下realloc()的正确用法是什么? 当realloc()失败时你会怎么做? 从我到目前为止看来,似乎如果realloc()失败,你必须free()旧指针。 真的吗? 这是一个例子: 1. char *ptr = malloc(sizeof(*ptr) * 50); 2. … 3. char *new_ptr = realloc(ptr, sizeof(*new_ptr) * 60); 4. if (!new_ptr) { 5. free(ptr); 6. return NULL; 7. } 假设realloc()在第3行失败。 我是否通过free() ing ptr在第5行做正确的事情?

调用realloc后是否需要初始化(设置为0)内存?

我需要实现一个指向typedef指针的简单动态指针数组。 每次用户请求时使用realloc,数组大小将增加sizeof(指针)。 所以我拥有的是: #include #include #include typedef void* node; void printmem(node* a, int c) { int i; for (i = 0; i < c; ++i) { printf("%d\t\t%p\n", i, a[i]); } } int main(void) { node* nodes = NULL; int i = 0, count = 20; for (i = 0; i < count; ++i) { nodes […]

动态数组:使用realloc()而不会出现内存泄漏

我使用realloc来调整分配的内存: char **get_channel_name(void) { char **result; int n; result = (char **) 0; for (elem = snd_mixer_first_elem(handle), n = 0; elem; elem = snd_mixer_elem_next(elem)) { if (!snd_mixer_selem_is_active(elem)) continue; if (snd_mixer_selem_has_playback_volume(elem) && snd_mixer_selem_has_playback_switch(elem) && snd_mixer_selem_has_capture_switch(elem)) { if (result == (char **) 0) result = (char **) malloc(sizeof(char *)); else result = (char **) realloc(result, sizeof(char *) […]

在2D数组上使用realloc c

如果我的问题有些模糊,我对C有点不好意思。 我需要在2D数组上使用realloc而不会丢失它以前的数据,我在我的程序中有这个function: void modifyMatrix(int **iMat, int iRow, int iRow2, int iCol) { int i; iMat = (int**)realloc(iMat, (iRow2)*sizeof(int*)); for(i=iRow; i<iRow2; i++) { iMat[i]=NULL; } for(i=0; i<iRow2; i++) { iMat[i]=(int*)realloc(iMat[i], (iCol)*sizeof(int)); } } iRow是原始尺寸,iRow 2和iCol是新尺寸,并且都在程序的其他地方捕获。 每当我尝试打印矩阵时,我一直在添加的行和列上获取垃圾数据或内存值,我做错了什么? 如果您需要完整的代码或任何其他问题需要澄清,请提前告知我们! 编辑:下面你可以看到我用来创建Matrix的代码 我的坏,我想我应该补充说矩阵已经在程序的其他地方创建了,这个function我只是想修改尺寸,感谢快速响应btw!,下面你可以找到与之相关的function我正在创建数组 void createMatrix(int ***iMat, int iRow, int iCol) { int **iRow2 = (int**)calloc(iRow, sizeof(int*)); int i; for (i=0; […]

realloc():下一个大小无效

我遇到了realloc函数的问题。 我只使用C(所以没有矢量)和LibCurl。 我遇到的问题是我在write_data函数的第12次迭代中得到以下错误(realloc():无效的下一个大小)(我将函数传递给Curl作为回调,每次libcurl都调用它时一些要传回的数据(数据以块的forms传递))。 跟踪: -Removed- 资源: #include #include #include #include char * Data; //stores the data size_t RunningSize; int write_data( char *ptr, size_t size, size_t nmemb, void *stream ) { size_t ThisSize = (size * nmemb); //Stores the size of the data to be stored size_t DataLen = strlen( Data ); //length of the data […]