C分段故障结构/指针

时间:2014-01-21 17:46:09

标签: c segmentation-fault

我对我的C编程有一点经验,而且我确信这是一件简单的事情,我稍后会自己开始,但我无法理解。我不想发布太多代码,但这里有相关内容:

#define MAX_COMMAND_ARGS 9
#define MAX_COMMAND_SIZE 80

typedef struct
{
  int   argc;
  char* argv[MAX_COMMAND_ARGS + 1];
  char* history[MAX_COMMAND_SIZE+1];
  size_t size;

} Command;



void History(const Command* cmd)
{
  for (size_t i = 0; i < cmd->size-1; ++i)
    {
      printf("%s\n", cmd->history[i]);
    }
}

输入另一个函数中作为命令存在的这一行:

command->history[command->size] = command->argv[0];
++(*command).size;

我正在尝试实现一个简单的历史命令,但每次调用History函数时都会出现seg错误。任何帮助将不胜感激。

编辑:我修复了格式问题,我一直在搞乱printf线。这是我得到seg错误的那一行:

printf("%s\n", cmd->history[i]);

2 个答案:

答案 0 :(得分:0)

分段错误通常是尝试访问CPU无法物理寻址的内存。

Avoid using uninitialized pointer.

使用malloc()或calloc()分配一些内存并将其分配给指针,然后为其赋值。

答案 1 :(得分:0)

一个非常可能的提示是你没有为历史表分配内存。

尝试使用strdup函数插入历史记录条目,并且在从列表中删除条目后不要忘记调用free

如果这不是您的问题,您需要提供更多代码。