如何在malloc()之后成功释放()指针
基本上,我只是在学习如何分配内存和使用C语言中的内存。我使用gcc进行编译,nano作为我的编辑器,下面是我的代码:如何在malloc()之后成功释放()指针,c,gcc,C,Gcc,基本上,我只是在学习如何分配内存和使用C语言中的内存。我使用gcc进行编译,nano作为我的编辑器,下面是我的代码: #include <stdio.h> #include <stdlib.h> static int *ip, i; main (){ ip=(int *)malloc(10*sizeof(int)); for(i=0;i<10;++i){ scanf("%d
#include <stdio.h>
#include <stdlib.h>
static int *ip, i;
main (){
ip=(int *)malloc(10*sizeof(int));
for(i=0;i<10;++i){
scanf("%d",ip++);
}
free(ip);
return EXIT_SUCCESS;
}
我想知道为什么会发生这种情况,我如何才能避免这种情况。我的方法对记忆不友好吗?这是怎么回事
如何重新编写代码使其工作
我没有从任何书籍、教程或任何东西中学习。我学习一门语言的方式是阅读编译器或IDE的源代码,或者是语言的编写方式——然后从那里开始。所以我真的没有任何参考资料。有人知道怎么解决这个问题吗
非常感谢!
~Phox问题是您需要保存原始指针以释放它:
#include <stdio.h>
#include <stdlib.h>
void main (){
int *ip, i;
ip=(int *)malloc(10*sizeof(int));
if (ip == NULL) {
perror ("Memory allocation error");
return;
}
current_p = ip;
for(i=0;i<10;++i){
// increment another pointer; don't modify original pointer
scanf("%d",current_p++);
}
free(ip);
}
#包括
#包括
空干管(){
int*ip,i;
ip=(int*)malloc(10*sizeof(int));
如果(ip==NULL){
perror(“内存分配错误”);
返回;
}
电流p=ip;
对于(i=0;i而言,问题在于您的指针ip与malloc的第一个位置不同。您可以通过创建临时指针来修复它。例如:
#include <stdio.h>
#include <stdlib.h>
static int *ip, i, *tmp_ip;
int main (){
tmp_ip=(int *)malloc(10*sizeof(int));
ip = tmp_ip; // making ip to point the same place as tmp_ip.
for(i=0;i<10;++i){
scanf("%d",ip++);
}
free(tmp_ip);
return EXIT_SUCCESS;
}
#包括
#包括
静态int*ip,i,*tmp_-ip;
int main(){
tmp_ip=(int*)malloc(10*sizeof(int));
ip=tmp_ip;//使ip指向与tmp_ip相同的位置。
对于(i=0;i)您需要释放原始指针。您已经将指针增加了10倍。而不是说ip++
说ip+i
。您可能想知道您的C编写风格大约是从1970年开始的。它在现代C中看起来会有很大的不同。关于您的编辑器是nano
的信息是否与您的问题相关?“问题必须表明对正在解决的问题的最低理解”…人们,即使是30k用户也不会对main的返回类型表示怀疑?这是对C的null
C99(或更高版本)的添加?因为对于C90,我只知道null
(或直接使用0
或(void*)0
)。即使在C++11中存在内置常量,它也是nullptr
,而不是null
@celtschk-简单的输入:对不起
#include <stdio.h>
#include <stdlib.h>
void main (){
int *ip, *current_p, i;
ip=(int *)malloc(10*sizeof(int));
if (ip == NULL) {
perror ("Memory allocation error");
return;
}
for(i=0;i<10;++i){
// index; don't modify original pointer
scanf("%d",ip[i]);
}
free(ip);
}
#include <stdio.h>
#include <stdlib.h>
static int *ip, i, *tmp_ip;
int main (){
tmp_ip=(int *)malloc(10*sizeof(int));
ip = tmp_ip; // making ip to point the same place as tmp_ip.
for(i=0;i<10;++i){
scanf("%d",ip++);
}
free(tmp_ip);
return EXIT_SUCCESS;
}