今天我弄乱了malloc和整数指针。程序的设置使其将内存位置分配给整数指针,然后用数组等一堆整数填充内存位置,然后打印所有整数。问题是当它完成运行时它会崩溃。我怀疑是malloc导致了这个问题。
这是代码
#include<stdio.h>
#include<stdlib.h>
int main(){
int *name,x;
char y;
name=malloc(sizeof(int));
for(x=0;x<500;x++){
name[x]=x;
}
for(x=0;x<500;x++){
printf("%d ",name[x]);
}
scanf("%c",&y);
free(name);
return 0;
}
请帮忙。谢谢!
name = malloc(sizeof(int));
是问题所在。这样,您只能在数组中存储一个 int。尝试
name = malloc(sizeof(int) * 500);
相反。
呃,"malloc()"并没有让你的程序崩溃。
您正在使程序崩溃:)
建议:
-
检查返回 NULL 的 "name=malloc()" (即检查错误)。
-
不要为 1 个 int 分配空间("sizeof(int)"可能是四个字节),然后尝试写 500 个整数:)
-
不要用"500"这样的"幻数"乱扔代码 - 改用常量。
建议的更改:
#include<stdio.h>
#include<stdlib.h>
#define NELMS 500
int main(){
int *name = NULL,x;
char y;
name=malloc(sizeof(int) * NELMS);
if (!name) {
perror ("Unable to allocate memory!");
return 1;
}
for(x=0;x<NELMS;x++){
name[x]=x;
}
for(x=0;x<NELMS;x++){
printf("%d ",name[x]);
}
scanf("%c",&y);
free(name);
return 0;
}
您正在分配内存以仅存储一个int
。您需要的是:
名称=malloc(500*sizeof(int));