2012-03-30 78 views
0

为以下代码获取分段错误。请指教。使用strcpy时的周期性分段错误

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种方式为列结构分配空间,但仍然出现分段错误。我错过了什么吗?

+0

这是对SO ... – UmNyobe 2012-03-30 14:31:47

+1

C或C++最问的问题?这很重要,你(“惯用”)这样做的方式在两种语言中都是不同的。 – Mat 2012-03-30 14:32:09

+0

你的主要需要一个return语句。 – saadtaame 2012-03-30 14:39:39

回答

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

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

+0

准确答案... – 2012-03-30 14:34:04

1

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

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

当然,你需要检查是否存在错误,并使其否则有意义。

1

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

2

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

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