- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个小型服务器,它创建一个新线程来处理每个新连接。我需要使用 pthread_create 的第四个参数将套接字传递给函数。当试图释放用于套接字的内存时,出现段错误。沟通工作正常。我试过传递一个 void* 和一个 void**(转换为 void*,有点难看)
这是我在尝试解决这个问题时使用的最新工具,稍后将在响应函数中进行实际工作。
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <pthread.h>
void *respond(void *thread_arg)
{
void *arg = *(void**)thread_arg;
printf("responding...\n");
int client_sock;
client_sock = (int)arg;
char *message = "Write smthng to echo!\n\t";
send(client_sock,message,strlen(message),0);
char *buf = (char*)malloc(100);
int ptr = 0;
char last = ' ';
while (last != '\n') {
recv(client_sock,&last,1,0);
buf[ptr++] = last;
}
buf[ptr++] = '\n';
send(client_sock, buf, ptr, 0);
ptr = 0;
free(buf);
close(client_sock);
//free(arg); // why segfault?
//free(*(void**)thread_arg); // the same
pthread_exit(NULL);
}
int main(int argc, char **argv)
{
int socket_desc, client_sock, addrlen, tmp;
struct sockaddr_in address;
pthread_t *responder_thread;
void *cs;
socket_desc = socket(AF_INET, SOCK_STREAM, 0);
if (socket_desc < 0)
printf("could not create socket");
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(8080);
tmp = bind(socket_desc, (struct sockaddr *)&address, sizeof(address));
if (tmp < 0)
printf("could nod bind to port!");
listen(socket_desc, 5);
addrlen = sizeof(struct sockaddr_in);
while (true) {
client_sock = accept(socket_desc, (struct sockaddr *)&address, (socklen_t*)&addrlen);
if (client_sock < 0) {
printf("could not create client socket");
} else {
printf("Accepted connection!\n");
cs = malloc(sizeof(int));
cs = (void*)client_sock;
responder_thread = (pthread_t*)malloc(sizeof(pthread_t*));
tmp = pthread_create(responder_thread, NULL, respond, (void*)&cs);
//cs = NULL;
if (tmp) {
printf("pthread_create returned '%d', exiting", tmp);
exit(-1);
}
}
}
pthread_exit(NULL);
}
最后澄清一下;说到c,我非常缺乏经验。 :)
最佳答案
您有大量内存泄漏和一般内存错误:
cs = malloc(sizeof(int));
cs = (void*)client_sock;
第一行分配内存并将指针分配给cs
,第二行立即丢弃该指针,用整数值client_sock
覆盖它。稍后您尝试释放那个值,这是一个明显的错误,因为它不是一个有效的指针。
你应该像这样构造你的代码:
int * cs = malloc(sizeof(int));
*cs = client_sock;
pthread_create(..., cs);
线程函数:
void * respond(void * thread_arg)
{
int * cs = (int*)thread_arg;
/* ... */
free(cs);
}
不需要通过获取 cs
的地址进行额外的间接访问。
关于c - 释放 pthread_create 中指定的函数中的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8719888/
简而言之:我想从可变参数模板参数中提取各种选项,但不仅通过标签而且通过那些参数的索引,这些参数是未知的 标签。我喜欢 boost 中的方法(例如 heap 或 lockfree 策略),但想让它与 S
我可以对单元格中的 excel IF 语句提供一些帮助吗? 它在做什么? 对“BaselineAmount”进行了哪些评估? =IF(BaselineAmount, (Variance/Baselin
我正在使用以下方法: public async Task Save(Foo foo,out int param) { ....... MySqlParameter prmparamID
我正在使用 CodeGear RAD Studio IDE。 为了使用命令行参数测试我的应用程序,我多次使用了“运行 -> 参数”菜单中的“参数”字段。 但是每次我给它提供一个新值时,它都无法从“下拉
我已经为信用卡类编写了一些代码,粘贴在下面。我有一个接受上述变量的构造函数,并且正在研究一些方法将这些变量格式化为字符串,以便最终输出将类似于 号码:1234 5678 9012 3456 截止日期:
MySql IN 参数 - 在存储过程中使用时,VarChar IN 参数 val 是否需要单引号? 我已经像平常一样创建了经典 ASP 代码,但我没有更新该列。 我需要引用 VarChar 参数吗?
给出了下面的开始,但似乎不知道如何完成它。本质上,如果我调用 myTest([one, Two, Three], 2); 它应该返回元素 third。必须使用for循环来找到我的解决方案。 funct
将 1113355579999 作为参数传递时,该值在函数内部变为 959050335。 调用(main.c): printf("%d\n", FindCommonDigit(111335557999
这个问题在这里已经有了答案: Is Java "pass-by-reference" or "pass-by-value"? (92 个回答) 关闭9年前。 public class StackOve
我真的很困惑,当像 1 == scanf("%lg", &entry) 交换为 scanf("%lg", &entry) == 1 没有区别。我的实验书上说的是前者,而我觉得后者是可以理解的。 1 =
我正在尝试使用调用 SetupDiGetDeviceRegistryProperty 的函数使用德尔福 7。该调用来自示例函数 SetupEnumAvailableComPorts .它看起来像这样:
我需要在现有项目上实现一些事件的显示。我无法更改数据库结构。 在我的 Controller 中,我(从 ajax 请求)传递了一个时间戳,并且我需要显示之前的 8 个事件。因此,如果时间戳是(转换后)
rails 新手。按照多态关联的教程,我遇到了这个以在create 和destroy 中设置@client。 @client = Client.find(params[:client_id] || p
通过将 VM 参数设置为 -Xmx1024m,我能够通过 Eclipse 运行 Java 程序-Xms256M。现在我想通过 Windows 中的 .bat 文件运行相同的 Java 程序 (jar)
我有一个 Delphi DLL,它在被 Delphi 应用程序调用时工作并导出声明为的方法: Procedure ProduceOutput(request,inputs:widestring; va
浏览完文档和示例后,我还没有弄清楚 schema.yaml 文件中的参数到底用在哪里。 在此处使用 AWS 代码示例:https://github.com/aws-samples/aws-proton
程序参数: procedure get_user_profile ( i_attuid in ras_user.attuid%type, i_data_group in data_g
我有一个字符串作为参数传递给我的存储过程。 dim AgentString as String = " 'test1', 'test2', 'test3' " 我想在 IN 中使用该参数声明。 AND
这个问题已经有答案了: When should I use "this" in a class? (17 个回答) 已关闭 6 年前。 我运行了一些java代码,我看到了一些我不太明白的东西。为什么下
我输入 scroll(0,10,200,10);但是当它运行时,它会传递字符串“xxpos”或“yypos”,我确实在没有撇号的情况下尝试过,但它就是行不通。 scroll = function(xp
我是一名优秀的程序员,十分优秀!