gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:34:35 27 4
gpt4 key购买 nike

我最近遇到了一个错误,我找出了原因。情况是我使用 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 运行时库从操作系统中获取一 block 内存并将其返回给您使用。如果您刚刚声明:

 char *temp;

你现在有一个初始化的指针,它很可能指向谁知道什么。如果您随后尝试将数据填充到其中,则行为是未定义的。我建议阅读Pointers以及 C 语言的内存管理。

关于c - 为什么如果我不 malloc() 一些内存,使用 char * 会导致程序停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25733108/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com