【发布时间】:2017-09-17 14:09:41
【问题描述】:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
typedef struct client
{
int threadid;
int argc;
char *argv[3];
} client;
void exit(int status);
void error(char *msg);
void *threadClient(void *socket_desc);
int main(int argc, char *argv[])
{
client info[10];
pthread_t thread[10];
printf("%s\n%s\n%s\n", argv[0], argv[1], argv[2]);
// Error happens here
for (int i=0; i<=10; i++)
{
info[i].threadid = i;
strcpy(info[i].argv[0], argv[0]);
strcpy(info[i].argv[1], argv[1]);
strcpy(info[i].argv[2], argv[2]);
info[i].argc = argc;
printf("here");
if (pthread_create(&thread[i], NULL, threadClient, (void*)&info[i]) < 0)
{
perror("could not create thread");
return 1;
}
sleep(3);
}
pthread_exit(NULL);
return 0;
}
在循环期间,当我尝试将信息从 argv 复制到我的结构时,我遇到了分段错误。为什么会这样?
程序收到信号SIGSEGV,分段错误。 __strcpy_sse2_unaligned () 在 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:296 296 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:没有这样的文件或目录。
【问题讨论】:
-
1)
i<=10-->i<102)strcpy(info[i].argv[0], argv[0]);info[i].argv[0]未初始化。 -
我改变了for循环我的问题谢谢我没有注意到我把它放在那里。但是我将如何初始化它?
-
info[i].argv[0] = malloc(strlen(argv[0])+1);在strcpy之前。
标签: c segmentation-fault strcpy