c语言 - 为什么如果我不 malloc() 一些内存,使用 char * 会导致程序停止?



我最近遇到了一个错误,我弄清楚了原因。情况是,我使用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.中的指针和内存管理

相关内容

  • 没有找到相关文章