使用strcpy时重复出现分段错误
recurring segmentation fault while using 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");
}
我使用两种方法为列结构分配空间,但仍然存在分段错误。我是不是错过了什么?
结构中的任何指针实际上都没有初始化为任何内容。你必须给它们一个维度,或者动态地为它们分配一些内存。
试试这个(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
)未初始化,指向一些随机内存位置,因此您可以立即调用未定义的行为。
相关文章:
- 在某些循环内使用vector.push_back时出现分段错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何解决gcc编译器优化导致的centos双编译器设置中的分段错误
- 当我的阵列太大时出现分段错误
- 分段错误当我试图运行程序时出错
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 尝试使用集合函数时出现分段错误
- 我无法缩小此分段错误的原因
- g++的分段错误(在NaN上使用to_string两次时)
- 我是如何在这段代码中出现分段错误的
- 创建结构的数组时遇到分段错误
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 在 c++ 中实现 Trie 时出现分段错误
- 为什么 fstream 在打开带有格式的文件时会导致分段错误?
- 为什么我遇到分段错误?
- 动态类的分段错误(家庭作业问题)
- 分段错误 - 读取初始化指针的数组
- 如何摆脱C ++中的分段错误错误?
- 使用 CTYPE 时出现分段错误
- 为什么代码给出分段错误?