关于C中的realloc函数的简单问题:如果我使用realloc来缩小指针所指向的内存块,那么"额外"内存是否会被释放?还是需要以某种方式手动释放?
例如,如果我这样做
int *myPointer = malloc(100*sizeof(int));
myPointer = realloc(myPointer,50*sizeof(int));
free(myPointer);
Run Code Online (Sandbox Code Playgroud)
我会有内存泄漏吗?
在这种情况下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检查吗?
稍后编辑:
稍后编辑 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) 所以这次我真的不知道如何把这个头衔.首先,我想说,如果问题与"家庭作业"有关,我在这个页面上看到了一些关于警告的评论.我的是,但它也已完成,我只是想进一步了解代码发生了什么.
我也读了一段时间的帖子和书籍,但我想我仍然缺少一些东西.
我有两行代码我在我使用的代码中不太了解.这项工作是关于获取用作参数的任何文件(如果它是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它不能正常工作.
我知道可能这个问题太模糊,而且写的很糟糕,但是我又不确定这一点,我也尽力解释自己(英语没有母语,因为它可能很明显).