获取以下代码的分段错误。请告知。
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");
}
我使用两种方法为列结构分配空间,但仍然存在分段错误。我是不是错过了什么?
结构中的任何指针实际上都没有初始化为任何内容。你必须给它们一个维度,或者动态地为它们分配一些内存。
试试这个(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;
}
col[0].c_name
是一个指针,但不指向任何内存。这就是为什么它会断开。
在复制其中的任何内容之前,请使用数组char c_name[256];
或malloc()
分配一些内存。
您从不分配内存和初始化char*
指针。
像
strcpy(col[0].c_name=malloc(sizeof "PSID"),"PSID");
当然,您需要检查错误,并使其在其他方面有意义。
您为columns
结构分配空间,但不为要存储的字符串分配空间。您的指针(即c_name
)未初始化,指向一些随机内存位置,因此您可以立即调用未定义的行为。