程序正常运行后出现段错误

Segmentation fault after program runs correctly

我正在用 C 为学校做一个项目,我遇到了一个奇怪的问题。 我的程序通常是 运行,但在最后一个命令之后我遇到了分段错误,我不明白为什么。

这是我的代码:(抱歉有葡萄牙语版画)

void main_args(int argc, char* argv[], struct main_data* data)
{   
    char *str;
    for(int i = 1; i < argc; i++)
    {   
        strcat(str, argv[i]);
        strcat(str, " ");
    }
    if(argc != 6 || sscanf(str, "%d %d %d %d %d", &data->max_ops, &data->buffers_size, &data->n_clients, &data->n_proxies, &data->n_servers) != 5)
    {   
        if(argc == 1){
            printf("Uso: sovaccines max_ops buffers_size n_clients n_proxies n_servers\n");
            printf("Exemplo: ./bin/sovaccines 10 10 1 1 1\n");
        }else{
            printf("Parâmetros incorretos! Exemplo de uso: ./bin/sovaccines 10 10 1 1 1\n");
        }
    }

}


int main(int argc, char* argv[]){
    struct main_data* aux = malloc(sizeof(struct main_data));
        
    main_args(argc, argv, aux);
    printf("primeiro: %d\n", aux->max_ops);
    printf("segundo: %d\n", aux->buffers_size);
    printf("terceiro: %d\n", aux->n_clients);
    printf("quarto: %d\n", aux->n_proxies);
    printf("quinto: %d\n", aux->n_servers);
    free(aux);
    printf("What the hell\n");
    return 0;
}

输出是这样的:

希望有人能帮助我。

你遇到了段错误,因为 char *str 从未分配过一些内存。您需要以正确的方式初始化它:

// Replace 128 with your preferable number of chars
char *str = malloc(sizeof(char) * 128);

注意:当你像这样手动分配内存时,它也需要在使用结束后立即释放。这可以通过使用 free(ptr):

来完成
// After usage of 'str'
free(str);

最后,在使用 strcat() 之前用一些字符初始化新创建的字符串:

str[0] = '[=12=]'; // Initializing the first character with a null-terminator

此后,您将不再遇到段错误。

这里是 demo

在函数内 main_args, 您将 str 声明为指针,但没有为其分配内存来存储。 采用 int ArgsStringSize = 100; char *str = (char *)malloc(ArgsStringSize); 要么 字符 str[1000];