我可以在VS2013中正式使用free()吗? \define\u CRT\u SECURE\u NO\u警告 #包括 #包括 #包括 #定义TSIZE 45 结构膜{ 字符标题[TSIZE]; 国际评级; 结构胶片*下一步; }; 内部主(空) { 结构胶片*头=空; 结构胶片*prev,*当前; 字符输入[TSIZE]; 放置(“输入第一个电影标题:”); while(获取(输入)!=NULL&&input[0]!='\0') { 当前=(结构胶片*)malloc(尺寸(结构胶片)); if(head==NULL) 水头=电流; 其他的 上一个->下一个=当前; 当前->下一步=空; strcpy(当前->标题,输入); 卖出(“输入您的评级(0-10):”; scanf(“%d”,&当前->额定值); 而(getchar()!='\n') 继续; 放置(“输入下一个电影标题(空行停止):”; prev=当前值; } if(head==NULL) printf(“未输入数据”); 其他的 printf(“这是电影列表:\n”); 电流=水头; while(当前!=NULL) { printf(“电影:%s分级:%d\n”,当前->标题,当前->分级); 当前=当前->下一步; } 电流=水头; while(当前!=NULL) { 自由(电流); printf(“呵呵.\n”); 当前=当前->下一步; } printf(“再见!\n”); 返回0; }

我可以在VS2013中正式使用free()吗? \define\u CRT\u SECURE\u NO\u警告 #包括 #包括 #包括 #定义TSIZE 45 结构膜{ 字符标题[TSIZE]; 国际评级; 结构胶片*下一步; }; 内部主(空) { 结构胶片*头=空; 结构胶片*prev,*当前; 字符输入[TSIZE]; 放置(“输入第一个电影标题:”); while(获取(输入)!=NULL&&input[0]!='\0') { 当前=(结构胶片*)malloc(尺寸(结构胶片)); if(head==NULL) 水头=电流; 其他的 上一个->下一个=当前; 当前->下一步=空; strcpy(当前->标题,输入); 卖出(“输入您的评级(0-10):”; scanf(“%d”,&当前->额定值); 而(getchar()!='\n') 继续; 放置(“输入下一个电影标题(空行停止):”; prev=当前值; } if(head==NULL) printf(“未输入数据”); 其他的 printf(“这是电影列表:\n”); 电流=水头; while(当前!=NULL) { printf(“电影:%s分级:%d\n”,当前->标题,当前->分级); 当前=当前->下一步; } 电流=水头; while(当前!=NULL) { 自由(电流); printf(“呵呵.\n”); 当前=当前->下一步; } printf(“再见!\n”); 返回0; },c,visual-studio-2013,C,Visual Studio 2013,为什么该代码不能在VS 2013中正式使用?是否正是因为使用了free()函数,上述代码才无法工作? 也许free()无法在VS2013中正式运行??? 很抱歉发布了整个代码,但系统说由于缺少详细信息,我无法提交此问题….您正在访问指针当前在释放后将其禁用,这是未定义的行为。改变 到 请注意,您根本不应该使用get,因为它已从最新的C标准C11中删除,并且因其缓冲区溢出问题而臭名昭著。改用 另外,不要强制转换结果。编译器抛出的确切错误是什么?自由(当前);。。。当前->下一步您不能在免费之后使用

为什么该代码不能在VS 2013中正式使用?是否正是因为使用了
free()
函数,上述代码才无法工作? 也许
free()
无法在VS2013中正式运行???


很抱歉发布了整个代码,但系统说由于缺少详细信息,我无法提交此问题….

您正在访问指针
当前
释放后
将其禁用,这是未定义的行为。改变

请注意,您根本不应该使用
get
,因为它已从最新的C标准C11中删除,并且因其缓冲区溢出问题而臭名昭著。改用


另外,不要强制转换结果。

编译器抛出的确切错误是什么?
自由(当前);。。。当前->下一步您不能在
免费
之后使用
当前
d@BLUEPIXY谢谢你的回复。谢谢你的回答。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TSIZE 45
struct film{
    char title[TSIZE];
    int rating;
    struct film *next;
};

int main(void)
{
    struct film *head = NULL;
    struct film *prev, *current;
    char input[TSIZE];

    puts("Enter first movie title:");
    while (gets(input) != NULL && input[0] != '\0')
    {
        current = (struct film*)malloc(sizeof(struct film));
        if (head == NULL)
            head = current;
        else
            prev->next = current;
        current->next = NULL;
        strcpy(current->title, input);
        puts("Enter your rating (0 - 10):");
        scanf("%d", &current->rating);
        while (getchar() != '\n')
            continue;
        puts("Enter next movie title(empty line to stop):");
        prev = current;

    }

    if (head == NULL)
        printf("No data entered.");
    else
        printf("Here is the movie list:\n");
    current = head;
    while (current != NULL)
    {
        printf("Movie: %s Rating: %d\n", current->title, current->rating);
        current = current->next;
    }
    current = head;
    while (current != NULL)
    {
        free(current);
        printf("hehe.\n");
        current = current->next;
    }
    printf("Bye!\n");

    return 0;
}    
while (current != NULL)
{
    free(current);
    printf("hehe.\n");
    current = current->next;
}
while (current != NULL)
{
    struct film *tmp = current;
    printf("hehe.\n");
    current = current->next;
    free(tmp);
}