C 当试图在发布模式下创建结构时,有时会出现如下错误;变量已优化且不可用“;
有时,我的程序会因错误而崩溃,例如“C 当试图在发布模式下创建结构时,有时会出现如下错误;变量已优化且不可用“;,c,C,有时,我的程序会因错误而崩溃,例如“变量被优化掉且不可用”“或“无法读取注册值””。但有时程序运行正常,直到我尝试使用remove函数,然后在尝试删除最后一个节点时,我得到一个错误,即“temp”变量已优化,不可用 我不知道这些错误是什么意思 我需要制作一个链表,每个节点都包含一个结构和下一个节点。节点内的结构是一个帧,这意味着它包含显示持续时间的图像,(unsigned int),图像名称(char*)图像目录(char*) 如果找不到该目录,用户将被要求输入正确的目录,在我看来,错误主要来自
变量被优化掉且不可用”
“或“无法读取注册值”
”。但有时程序运行正常,直到我尝试使用remove函数,然后在尝试删除最后一个节点时,我得到一个错误,即“temp”变量已优化,不可用
我不知道这些错误是什么意思
我需要制作一个链表,每个节点都包含一个结构和下一个节点。节点内的结构是一个帧,这意味着它包含显示持续时间的图像,(unsigned int)
,图像名称(char*)
图像目录(char*)
如果找不到该目录,用户将被要求输入正确的目录,在我看来,错误主要来自于此。(我之所以说“在我看来”,是因为我无法在VS中使用断点,因为我得到错误“断点当前不会被命中。调试器目标代码类型的可执行代码没有与此行关联。”(我在发行版中运行该程序,因为“openCV”在调试中不适用于我)
\define\u CRT\u SECURE\u NO\u警告
#包括
#包括
#包括
#包括
#包括“printMenu.h”
#包括“linkedList.h”
#包括“view.h”
FrameNode*createFrame()
{
无符号整数帧持续时间=0;
char*frameName=0;
char*imagePath=0;
int-imageFound=0;
文件*checkImage=0;
帧*newFrame=0;
FrameNode*newNode=0;
newFrame=(Frame*)malloc(sizeof(Frame));
newNode=(FrameNode*)malloc(sizeof(FrameNode));
frameName=(char*)malloc(256);
imagePath=(char*)malloc(256);
printf(“选择图像的持续时间:”);
scanf(“%d”、&frameDuration);
getchar();
printf(“命名图像(必须是uniqe名称):”;
fgets(帧名称,256,标准输入);
frameName=(char*)realloc(frameName,strlen(frameName));
frameName[strcspn(frameName,“\n”)]=0;
而(!imageFound)
{
printf(“输入图像路径:”);
fgets(imagePath,256,标准输入);
imagePath=(char*)realloc(imagePath,strlen(imagePath));
imagePath[strcspn(imagePath,“\n”)]=0;
printf(“%s%d%s”,帧名称,帧持续时间,图像路径);
if(checkImage=fopen(imagePath,“r”))
{
imageFound=1;
fclose(checkImage);
}
其他的
{
printf(“无此类目录!\n”);
}
}
imageFound=0;
新建帧->持续时间=帧持续时间;
strcpy(newFrame->name,frameName);
strcpy(newFrame->path,imagePath);
newNode->frame=newFrame;
newNode->next=NULL;
返回newNode;
}
void addFrame(帧节点**头)
{
帧节点*curr=*头;
FrameNode*newNode=0;
newNode=(FrameNode*)malloc(sizeof(FrameNode));
newNode=createFrame();
如果(!*头)
{
(*头)=新节点;
}
其他的
{
while(当前->下一步)
{
当前=当前->下一步;
}
curr->next=newNode;
}
}
无效列表框架(框架节点*头部)
{
帧节点*curr=头部;
如果(!curr)
{
printf(“未找到帧。\n”);
}
其他的
{
printf(“名称持续时间路径\n”);
while(curr)
{
printf(“%s%d%s\n”,当前->帧->名称,当前->帧->持续时间,当前->帧->路径);
当前=当前->下一步;
}
}
}
void removeFrame(FrameNode**head,int-length,char*imageName)
{
帧节点*curr=*头;
FrameNode*temp=NULL;
int=0;
temp=(FrameNode*)malloc(sizeof(FrameNode));
如果(长度==0)
{
printf(“未找到帧!\n”);
}
else if(长度==1&&!strcmp((*head)->frame->name,imageName))
{
*head=NULL;
printf(“框架已删除。\n”);
}
否则如果(!strcmp(curr->frame->name,imageName))
{
*头部=(*头部)->下一个;
}
其他的
{
while(curr->next | | curr | find)
{
如果(!strcmp(curr->next->frame->name,imageName)&&!找到)
{
温度=当前->下一步->下一步;
免费(当前->下一步);
当前->下一步=温度;
printf(“框架已删除。\n”);
发现=1;
}
当前=当前->下一步;
printf(“循环。\n”);
}
如果(!找到)
{
printf(“未找到框架!\n”);
}
}
}
void playGif(帧节点*头部)
{
玩(头);
}
//************************************
//方法:自由列表
//退货:作废
//描述:自由列表。
//参数:intNode*列表
//************************************
无效自由列表(框架节点*列表)
{
FrameNode*temp=NULL;
FrameNode*curr=列表;
while(curr)
{
温度=电流;
curr=(curr)->next;
免费(临时);
}
列表=空;
}
frameName=(char*)realloc(frameName,strlen(frameName))
是错误的,它不包括用于终止符的空间。这也是毫无意义的,如果只使用一个静态大小的数组,您的境况会好上100倍左右。@遗憾的是,我们被迫使用动态内存分配。您是在调试程序中运行此操作的吗?我的程序会崩溃,错误如下……不太可能。请注意您得到的ror消息是打印在VS中的监视窗口或即时窗口中的消息,它与程序的输出或崩溃原因没有直接关系。因此,您应该找出实际的错误消息,或指定如何准确地得到此消息,或至少是退出代码。调试发布版本通常不需要正如你所发现的,你是想知道为什么你不能得到一个调试版本?还是想知道如何调试一个发布版本?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
#include "printMenu.h"
#include "linkedList.h"
#include "view.h"
FrameNode* createFrame()
{
unsigned int frameDuration = 0;
char* frameName = 0;
char* imagePath = 0;
int imageFound = 0;
FILE* checkImage = 0;
Frame* newFrame= 0;
FrameNode* newNode = 0;
newFrame = (Frame*)malloc(sizeof(Frame));
newNode = (FrameNode*)malloc(sizeof(FrameNode));
frameName = (char*)malloc(256);
imagePath = (char*)malloc(256);
printf("Choose duration of image: ");
scanf("%d", &frameDuration);
getchar();
printf("Name the image (Must be a uniqe name): ");
fgets(frameName, 256, stdin);
frameName = (char*)realloc(frameName, strlen(frameName));
frameName[strcspn(frameName, "\n")] = 0;
while (!imageFound)
{
printf("Enter image path: ");
fgets(imagePath, 256, stdin);
imagePath = (char*)realloc(imagePath, strlen(imagePath));
imagePath[strcspn(imagePath, "\n")] = 0;
printf("%s %d %s", frameName, frameDuration, imagePath);
if (checkImage = fopen(imagePath, "r"))
{
imageFound = 1;
fclose(checkImage);
}
else
{
printf("No such directory!\n");
}
}
imageFound = 0;
newFrame->duration = frameDuration;
strcpy(newFrame->name, frameName);
strcpy(newFrame->path, imagePath);
newNode->frame = newFrame;
newNode->next = NULL;
return newNode;
}
void addFrame(FrameNode** head)
{
FrameNode* curr = *head;
FrameNode* newNode = 0;
newNode = (FrameNode*)malloc(sizeof(FrameNode));
newNode = createFrame();
if (!*head)
{
(*head) = newNode;
}
else
{
while (curr->next)
{
curr = curr->next;
}
curr->next = newNode;
}
}
void listFrames(FrameNode* head)
{
FrameNode* curr = head;
if (!curr)
{
printf("No frames found.\n");
}
else
{
printf("Name Duration Path\n");
while (curr)
{
printf("%s %d %s\n", curr->frame->name, curr->frame->duration, curr->frame->path);
curr = curr->next;
}
}
}
void removeFrame(FrameNode** head, int length, char* imageName)
{
FrameNode* curr = *head;
FrameNode* temp = NULL;
int found = 0;
temp = (FrameNode*)malloc(sizeof(FrameNode));
if (length == 0)
{
printf("No frames found!\n");
}
else if (length == 1 && !strcmp((*head)->frame->name, imageName))
{
*head = NULL;
printf("Frame removed.\n");
}
else if (!strcmp(curr->frame->name, imageName))
{
*head = (*head)->next;
}
else
{
while (curr->next || curr || found)
{
if (!strcmp(curr->next->frame->name, imageName) && !found)
{
temp = curr->next->next;
free(curr->next);
curr->next = temp;
printf("Frame removed.\n");
found = 1;
}
curr = curr->next;
printf("Loop.\n");
}
if (!found)
{
printf("Frame not found!\n");
}
}
}
void playGif(FrameNode* head)
{
play(head);
}
//************************************
// Method: freeList
// Returns: void
// Description: Frees list.
// Parameter: intNode * list
//************************************
void freeList(FrameNode* list)
{
FrameNode* temp = NULL;
FrameNode* curr = list;
while (curr)
{
temp = curr;
curr = (curr)->next;
free(temp);
}
list = NULL;
}