c - 在我使用 free() 函数和 Null 指针之后......程序仍然崩溃
问题描述
为什么这个程序会崩溃?帮我对free(ptr)背后的逻辑有一个清晰的认识;点 = 0;也。
#include<stdio.h>
#include<stdlib.h>
int main(){
int *ptr;
ptr = (int *) malloc(6 * sizeof(int));
for(int i = 0; i<6; i++)
{
printf("Enter the value of %d element is :", i);
scanf("%d", &ptr[i]);
free(ptr);
ptr = 0;
}
for(int i = 0; i<6; i++)
{
printf("The value of %d element is : %d\n", i, ptr[i]);
}
return 0;
}
解决方案
在循环的第一次迭代中
for(int i = 0; i<6; i++)
{
printf("Enter the value of %d element is :", i);
scanf("%d", &ptr[i]);
free(ptr);
ptr = 0;
}
你释放了分配的内存
free(ptr);
并设置指针ptr
等于NULL
。
ptr = 0;
所以在循环的下一次迭代和下一个循环中
for(int i = 0; i<6; i++)
{
printf("The value of %d element is : %d\n", i, ptr[i]);
}
您正在尝试使用语句中的空指针访问内存
scanf("%d", &ptr[i]);
和
printf("The value of %d element is : %d\n", i, ptr[i]);
移动这些语句
free(ptr);
ptr = 0;
在return语句之前形成for循环到程序的末尾。
推荐阅读
- python-3.x - Python3 input() 不是交互式的
- firebase - Flutter 无法导航到谷歌登录的另一个屏幕?
- postgresql - raster2pgsql - free():无效指针中止(核心转储)
- php - 使用 GET 或 POST 检索 ninja 表单值
- google-sheets - 谷歌表格查询中的日期差异函数
- go - nil 不会将数据库记录设置为 NULL
- javascript - 为什么我在 crypto-js 上收到格式错误的 UTF-8 数据错误?基本解码
- binary - 负数表示是唯一的吗?
- cmake - Variscite Yocto Rocko SOM 上的本地开发
- jenkins - 是否可以在 Kubernetes jenkins 的下一个构建项目中使用 prev 项目存档文件