【发布时间】:2017-06-28 04:40:33
【问题描述】:
我正在使用 C 语言开发一个简单的 Web 服务器,每当我尝试写入我在另一个函数的 main 中声明的 char[] 时,我都会遇到段错误。在任何人建议之前,我还没有将其声明为字符串文字。我尝试使用 malloc() 进行分配,在初始化时将数组中的每个 char 设置为 null 终止符,并且不将其初始化为任何内容(即在写入新内容之前不会读取它,因此没有理由归零它最初对任何东西),都无济于事。
发生的事情的语法如下:
#define MAX_BUFFER_LENGTH 20
int some_function(char *buffer) { //many other params as well
//lots of other code
snprintf(buffer, MAX_BUFFER_LENGTH, "%s", "HTTP/1.0 404 Not Found"); // This is where the segfault is thrown
}
int main(int argc, char *argv[]) {
char buffer[MAX_BUFFER_LENGTH];
//many other declarations
//...
some_function(buffer);
}
奇怪的是,段错误只发生在我第一次使用特定语法调用写入缓冲区时。有些请求不会创建段错误。如果我在不提交导致段错误的请求之后提交导致段错误的请求,则它们不再导致段错误。有什么见解吗?
【问题讨论】:
-
char *buffer[MAX_BUFFER_LENGTH];-->char buffer[MAX_BUFFER_LENGTH]; -
阅读您的编译器错误消息。如果没有看到,则需要重新配置编译器
-
对不起,实际上我在上面问的内容中有错字。它不是指针数组;我已经更改了代码以反映我所拥有的给我带来问题的内容。另外,对于任何想知道的人,我正在使用 -Wall 进行编译。
-
问题出在您没有显示的代码中,这几乎可以肯定是太多代码无法添加到您的问题中。您必须通过调试器和/或 Valgrind 运行它,看看实际发生了什么。
-
1) 您是否因 posted 代码而失败? 2) 你是否在其他任何地方使用
MAX_BUFFER_LENGTH给它可疑的名字? - 我希望MAX_BUFFER_SIZE用于char buffer[MAX_BUFFER_SIZE];并因此期望在其他地方使用不当,因为字符串 lengths 比所需的数组 sizes 小 1
标签: c segmentation-fault printf