为什么我不';t malloc()一些内存,使用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;

我最近遇到了一个bug,我想知道为什么。情况是,我使用char
*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我意识到在指针之后所做的一切实际上都可能破坏内存。Thx
malloc()
向内存返回一个poniter,而不是内存本身[/nitpick]