使用strcpy时重复出现分段错误

时间:2012-03-30 14:29:52

标签: c++ c segmentation-fault malloc

为以下代码获取分段错误。请指教。

struct columns {
      char* c_name;
      char* c_type;
      char* c_size;
};

int main(int argc, char* argv[])
{
  int column_num = 3;
  struct columns col[10];
  //columns *col = (columns*) malloc (sizeof(columns) * column_num);
  strcpy(col[0].c_name, "PSID");
  strcpy(col[0].c_type, "INT");
  strcpy(col[0].c_size, "4");
}

我使用2种方法为列结构分配空间,但继续得到分段错误。我错过了什么吗?

5 个答案:

答案 0 :(得分:5)

结构中的所有指针都没有实际初始化为任何东西。你必须给它们一个维度,或为它们动态分配一些内存。

答案 1 :(得分:2)

col[0].c_name是一个指针,但不指向任何内存。这就是为什么它会出现段错误。

在复制任何内容之前,使用数组char c_name[256];malloc()分配一些内存。

答案 2 :(得分:2)

试试这个(strdup处理存储,但记得在完成后自由):

struct columns {
  char* c_name;
  char* c_type;
  char* c_size;
};

int main(int argc, char* argv[])
{
  int column_num = 3;
  struct columns col[10];

  col[0].c_name = strdup("PSID");
  col[0].c_type = strdup("INT");
  col[0].c_size = strdup("4");

  return 0;
}

答案 3 :(得分:1)

您永远不会分配内存并初始化char*指针。

strcpy(col[0].c_name=malloc(sizeof "PSID"),"PSID");

当然,您需要检查错误并使其有意义。

答案 4 :(得分:1)

您为columns结构分配空间,但不为您要存储的字符串分配空间。您的指针(即c_name)未初始化,指向一些随机内存位置,因此您可以立即调用未定义的行为。