我最近遇到了一个错误,我弄清楚了原因。情况是,我使用char *arr
,然后使用类似于scanf("%s",arr);
的内容。我的程序意外停止,后来我发现这是因为我忘记使用malloc()来分配指定的内存区域。然而,我仍然想知道为什么会发生这种情况(内存泄漏?)!除了初始化字符串的第一个scanf之外,我实际上没有做任何实际修改内存的事情。一个例子是这样的
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
int *narr;
int *count;
int i,j,k;
char *temp=malloc(sizeof(char)*101);
scanf("%d",&n);
narr=malloc(sizeof(int)*n);
count=malloc(sizeof(int)*100);
for(i=0;i<100;i++)
{
count[i]=0;
}
for(i=0;i<n;i++)
{
scanf("%d %s",narr+i,temp);
k=narr[i];
count[k]++;
}
for(i=0,k=0;i<100;i++)
{
k+=count[i];
printf("%d ",k);
}
return 0;
如果我不使用malloc,那么OJ将面临错误。
指针必须指向某个东西,不是吗?申报时:
char *temp=malloc(sizeof(char)*101);
然后,您已经指示C运行库从操作系统获取内存块,并将其返回给您使用。如果您刚刚声明:
char *temp;
现在您有一个初始化的指针,它很可能指向谁知道什么。如果您尝试在其中填充数据,则行为是未定义的。我建议阅读C.中的指针和内存管理