相关疑难解决方法(0)

使用realloc缩小分配的内存

关于C中的realloc函数的简单问题:如果我使用realloc来缩小指针所指向的内存块,那么"额外"内存是否会被释放?还是需要以某种方式手动释放?

例如,如果我这样做

int *myPointer = malloc(100*sizeof(int));
myPointer = realloc(myPointer,50*sizeof(int));
free(myPointer);
Run Code Online (Sandbox Code Playgroud)

我会有内存泄漏吗?

c memory-management realloc

26
推荐指数
3
解决办法
2万
查看次数

如果新块大小小于初始值,我应该强制执行realloc检查吗?

在这种情况下realloc会失败吗?

int *a = NULL;

a = calloc(100, sizeof(*a));
printf("1.ptr: %d\n", a);

a = realloc(a, 50 * sizeof(*a));
printf("2.ptr: %d\n", a);

if(a == NULL){
    printf("Is it possible?\n");
}

return (0);
Run Code Online (Sandbox Code Playgroud)

}

我的输出是:

1.ptr: 4072560
2.ptr: 4072560
Run Code Online (Sandbox Code Playgroud)

所以'a'指向相同的地址.那么我应该强制执行realloc检查吗?

稍后编辑:

  • 在Windows XP下使用MinGW编译器.
  • 这个行为与Linux上的gcc类似吗?

稍后编辑 2:检查这种方式可以吗?

int *a = NULL, *b = NULL;

a = calloc(100, sizeof(*a));
b = realloc(a, 50 * sizeof(*a));

if(b == NULL){
    return a;
}
a = b;
return a;
Run Code Online (Sandbox Code Playgroud)

c realloc

7
推荐指数
2
解决办法
1860
查看次数

使用realloc(X,0)代替free()并使用长度为+1的malloc +1

所以这次我真的不知道如何把这个头衔.首先,我想说,如果问题与"家庭作业"有关,我在这个页面上看到了一些关于警告的评论.我的是,但它也已完成,我只是想进一步了解代码发生了什么.

我也读了一段时间的帖子和书籍,但我想我仍然缺少一些东西.

我有两行代码我在我使用的代码中不太了解.这项工作是关于获取用作参数的任何文件(如果它是0文件,它从stdin读取),并在标准输出上向后打印它.所有这些,谈论C,因为我试图放入标签.

第一个问题是:

array = realloc (array, 0);
Run Code Online (Sandbox Code Playgroud)

其中数组定义为

char **array;
Run Code Online (Sandbox Code Playgroud)

问题是免费不起作用,它没有释放使用的空间(也许我用错了?在其他地方我知道如何使用它,但不是这次).通过我已经完成的测试和我读过的内容,我相信realloc也在做同样的事情,但我不是100%.

第二个是:

char* alloc = malloc (strlen ((char*)string)+1);
Run Code Online (Sandbox Code Playgroud)

其中alloc用于复制我要放入数组的行的确切长度,所以我可以在此之后向后打印文本.

问题是为什么我必须使用+1.我的意思是如果由于某种原因我不使用它不起作用,我尝试使用不同的数字,它每次都有效,但如果我不这样做+1它不能正常工作.

我知道可能这个问题太模糊,而且写的很糟糕,但是我又不确定这一点,我也尽力解释自己(英语没有母语,因为它可能很明显).

c free memory-management realloc

7
推荐指数
3
解决办法
9051
查看次数

标签 统计

c ×3

realloc ×3

memory-management ×2

free ×1