为什么我不';t malloc()一些内存,使用char*会导致程序停止吗?
我最近遇到了一个bug,我想知道为什么。情况是,我使用char为什么我不';t malloc()一些内存,使用char*会导致程序停止吗?,c,string,pointers,malloc,C,String,Pointers,Malloc,我最近遇到了一个bug,我想知道为什么。情况是,我使用char*arr,然后使用类似于scanf(“%s”,arr)的东西。我的程序意外停止,后来我发现这是因为我忘记使用malloc()分配指定的内存区域。然而,我仍然想知道为什么会发生这种情况(内存泄漏?)!除了初始化字符串的第一次扫描之外,我实际上没有做任何修改内存的事情。 一个例子是这样的 #include <stdio.h> #include <stdlib.h> int main() { int n;
*arr
,然后使用类似于scanf(“%s”,arr)的东西代码>。我的程序意外停止,后来我发现这是因为我忘记使用malloc()分配指定的内存区域。然而,我仍然想知道为什么会发生这种情况(内存泄漏?)!除了初始化字符串的第一次扫描之外,我实际上没有做任何修改内存的事情。
一个例子是这样的
#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;
#包括
#包括
int main()
{
int n;
int*narr;
整数*计数;
int i,j,k;
char*temp=malloc(sizeof(char)*101);
scanf(“%d”和“&n”);
narr=malloc(sizeof(int)*n);
计数=malloc(sizeof(int)*100);
对于(i=0;i指针必须指向某个对象,如果声明:
char *temp=malloc(sizeof(char)*101);
然后,您已指示C运行时库从操作系统中获取内存块并将其返回给您使用。如果您刚刚声明:
char *temp;
您现在有了一个初始化指针,它很可能指向谁知道是什么。如果您尝试在其中填充数据,则行为是未定义的。我建议您在C中阅读和内存管理。您认为在这种情况下会发生什么?您正在随机内存中插入垃圾。假设您正在更改调用堆栈,prgram计数器,内存映射IO。它不会“导致程序停止”(有一个函数可以执行此操作:exit
)。写入随机内存将调用未定义的行为,这是另一回事。@MattMcNabb我意识到在指针之后所做的一切实际上都可能破坏内存。Thxmalloc()
向内存返回一个poniter,而不是内存本身[/nitpick]