我可以在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; }
为什么该代码不能在VS 2013中正式使用?是否正是因为使用了我可以在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中删除,并且因其缓冲区溢出问题而臭名昭著。改用 另外,不要强制转换结果。编译器抛出的确切错误是什么?自由(当前);。。。当前->下一步您不能在免费之后使用
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", ¤t->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);
}