条件跳转或移动取决于未初始化的值

2023-12-23

我已经为这个问题苦苦挣扎了一段时间,寻找每一种可能的解决方案。我是 C 新手,所以不太难。我知道我有一些未初始化的变量,但我找不到它们。我正在尝试打印一个矩阵。这是构造函数:

BoardP createNewBoard(int width, int high)
{  

    BoardP board = (BoardP) malloc(sizeof(Board));

    if (board == NULL)
    {
        reportError(MEM_OUT);
        return NULL;
    }
    board->height = high;
    board->width = width;
    board->board = (char**) malloc(high * sizeof(char*));
    int i;
    for (i=0; i<high; i++)
    {
        board->board[i] = (char*) malloc(width * sizeof(char));
        if (board->board[i] == NULL)
        {
            freeTempBoard(board,i);
            return NULL;
        }
    }

    return board;
}

构造函数返回 BoardP,Board 的一个打印器,它是:

typedef struct Board
{
    int width;
    int height;
    char **board;
} Board;

现在我尝试打印板->板失败。我循环遍历矩阵,并为每个单元格调用此函数:

static void printChar(ConstBoardP board, int X, int Y)
{
    if (X>=board->height || Y>=board->width)
    {
        printf(" ");
    }
    else
    {
        printf("%c ",board->board[X][Y]); //!!THIS IS LINE 299 IN Board.c!!
    }
}

最后这是我得到的错误:

==4931== Conditional jump or move depends on uninitialised value(s)
==4931==    at 0x4E973D9: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:880)
==4931==    by 0x4E6F01B: vfprintf (vfprintf.c:1614)
==4931==    by 0x4E75879: printf (printf.c:35)
==4931==    by 0x400D91: printChar (Board.c:299)
==4931==    by 0x400CED: printBoard (Board.c:284)
==4931==    by 0x400F1A: main (PlayBoard.c:19)
==4931== 
==4931== Conditional jump or move depends on uninitialised value(s)
==4931==    at 0x4E97401: _IO_file_overflow@@GLIBC_2.2.5 (fileops.c:887)
==4931==    by 0x4E6F01B: vfprintf (vfprintf.c:1614)
==4931==    by 0x4E75879: printf (printf.c:35)
==4931==    by 0x400D91: printChar (Board.c:299)
==4931==    by 0x400CED: printBoard (Board.c:284)
==4931==    by 0x400F1A: main (PlayBoard.c:19)
==4931== 
==4931== Conditional jump or move depends on uninitialised value(s)
==4931==    at 0x4E6F025: vfprintf (vfprintf.c:1614)
==4931==    by 0x4E75879: printf (printf.c:35)
==4931==    by 0x400D91: printChar (Board.c:299)
==4931==    by 0x400CED: printBoard (Board.c:284)
==4931==    by 0x400F1A: main (PlayBoard.c:19)

现在有另一个文件调用createNewBoard,然后创建printBoard(newBoard,0,0)。唯一可能未初始化的是板->板,除此之外我没有任何想法。我不知道如何调试它。 我知道它有很多文字,但我找不到问题。任何想法将不胜感激


Try:

for (i=0; i<high; i++)
{
    board->board[i] = (char*) malloc(width * sizeof(char));
    /* ... */
    memset(board[i], 0, width);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

条件跳转或移动取决于未初始化的值 的相关文章

  • VLC 媒体播放器有 C# 界面吗? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否可以使用 C 控制台应用程序中的包装器从 VLC 播放中当前播放的文件中读取曲目统计信息 时间 标
  • 如何从字符串中提取子字符串直到遇到第二个空格?

    我有一个像这样的字符串 o1 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 1232 5467 如何仅提取 o1 1232 5467 要提取的字符数并不总是相同 因此 我只想提取直到遇到
  • 格式说明符%02x

    我有一个简单的程序 include
  • 使用 ADAL v3 使用 ClientID 对 Dynamics 365 进行身份验证

    我正在尝试对我们的在线 Dynamics CRM 进行身份验证以使用可用的 API 我能找到的唯一关于执行此操作的官方文档是 https learn microsoft com en us dynamics365 customer enga
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • C# 中的 Stack<> 实现

    我最近一直在实现递归目录搜索实现 并且使用堆栈来跟踪路径元素 当我使用 string Join 连接路径元素时 我发现它们被颠倒了 当我调试该方法时 我查看了堆栈 发现堆栈内部数组中的元素本身是相反的 即最近 Push 的元素位于内部数组的
  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • C# 根据当前日期传递日期时间值

    我正在尝试根据 sql server 中的两个日期获取记录 Select from table where CreatedDate between StartDate and EndDate我通过了5 12 2010 and 5 12 20
  • LinkLabel 无下划线 - Compact Framework

    我正在使用 Microsoft Compact Framework 开发 Windows CE 应用程序 我必须使用 LinkLabel 它必须是白色且没有下划线 因此 在设计器中 我将字体颜色修改为白色 并在字体对话框中取消选中 下划线
  • 条件类型定义

    如果我有一小段这样的代码 template
  • C# 获取数据表中所有重复行的计数

    我通过运行存储过程来填充数据集 并且从数据集中填充数据表 DataSet RawDataSet DataAccessHelper RunProcedure storedprocedureName this will just return
  • wordexp 失败时我们需要调用 wordfree 吗?

    wordexp 失败时我们需要调用 wordfree 吗 在某些情况下 调用 wordfree 似乎会出现段错误 例如 当 wordfree 返回字符串为 foo bar 的错误代码时 这在手册页中并不清楚 我已经看到在某些错误情况下使用了
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何从 Windows Phone 7 模拟器获取数据

    我有一个 WP7 的单元测试框架 它在手机上运行 结果相当难以阅读 因此我将它们写入 XDocument 我的问题是 如何才能将这个 XML 文件从手机上移到我的桌面上 以便我可以实际分析结果 到目前为止 我所做的是将 Debugger B
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐