#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
の情報を私の構造体にコピーしようとすると、セグメント化エラーが発生します。それはなぜ起こるのですか?strcpy()上のセグメンテーションフォルト。
プログラム受信信号SIGSEGV、セグメンテーションフォルト。 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:296 の__strcpy_sse2_unaligned()296 ../sysdeps/x86_64/multiarch/strcpy-sse2-unaligned.S:このようなファイルまたはディレクトリはありません。
1) '私<=10' -->'私は<10 '2) 'strcpyの(情報[i]が.argv [0]、ARGV [0]);' 'info [i]。argv [0] 'は初期化されません。 – BLUEPIXY
私はforループの問題を変更しました。私はそこに置いたことに気付かなかったことに感謝します。しかし、私はそれをどのように初期化するつもりですか? – jhowe
'info [i] .argv [0] = malloc(strlen(argv [0])+ 1);' 'strcpy'の前。 – BLUEPIXY