Regcomp正在抛出分段错误

时间:2014-03-12 11:32:52

标签: gcc gdb

分段错误:在使用regcomp的行上,它会引发分段错误。 我使用gdb来运行程序。

我在尝试:

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <regex.h>
#define LINE_LENGTH 256

main()
{
  char *c_char;
  char *cp;
  char *temp;
  regex_t regex;
  int reg = 0;
  char f_input[] = {"path/path/.pc"};
  FILE *input;

 input = fopen(f_input, "r");
 while (fgets(temp, LINE_LENGTH, input) != NULL)
 {
  temp = (char*)malloc(sizeof(char)*LINE_LENGTH);
  if((cp = strstr(temp, "#define")) != NULL)
  {
    temp +=7;
    memset(c_char, '\0', sizeof(char)*50);
    c_char = strtok(temp, " ");
    reg = regcomp(&regex, "^[A-Z]", 0);
    reg = regexec(&regex, c_char, 0, NULL, 0);

    if (reg == REG_NOMATCH)
    {
      fprintf("%s should be in upper case.", c_char);
    }
  }
 }
}

来到生产线后:&#34; reg = regcomp(&amp; regex,&#34; ^ [A-Z]&#34;,0);&#34;我试图打印正则表达式的价值...... &#34; p regex&#34;。 它打印:

"{buffer = 0x0, allocated = 0, used = 0, syntax = 0, fastmap = 0x0.........}"

1 个答案:

答案 0 :(得分:0)

我认为崩溃可能是由以下代码造成的:

memset(c_char, '\0', sizeof(char)*50);
程序开始时

c_char未初始化:

main()
{
  char *c_char;

然后在while循环中,当您第一次调用memset()&#39; c_char&#39;仍然没有初始化。因此,您将无效指针传递给memset()