首页 > 解决方案 > 在我使用 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;
}

标签: cfor-loopnullpointerexceptiondynamic-memory-allocationfree

解决方案


在循环的第一次迭代中

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循环到程序的末尾。


推荐阅读