Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当试图在发布模式下创建结构时,有时会出现如下错误;变量已优化且不可用“;_C - Fatal编程技术网

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;
}