出于某种原因,以下情况无效:
int i;
for(i = 1; i < argc; i++) // Create thread for each dataset.
{
filename = strcat(argv[i], ".sdx"); // Concatenate file-extension '.sdx' to basename.
pthread_attr_init(&attr); // Set the attribute of the thread (default).
pthread_create(&tid[i], &attr, start_routine, filename); // Create thread.
pthread_join(tid[i],NULL); // Join thread after it completed.
}
如果我只传入一个文件,它会起作用,但不止这会导致分段错误。我不明白,如果我不连接文件扩展名,而是传入完整的文件名(包括其扩展名)作为命令行参数,一切正常。
答案 0 :(得分:3)
您不应直接修改argv[i]
。将其复制到本地缓冲区中。
int i;
for(i = 1; i < argc; ++i)
{
char *filename = malloc(strlen(argv[i]) + 4 + 1);
sprintf(filename, "%s.sdx", argv[i]);
pthread_attr_init(&attr); // Set the attribute of the thread (default).
pthread_create(&tid[i], &attr, start_routine, filename); // Create thread.
pthread_join(tid[i],NULL); // Join thread after it completed.
free(filename);
}