警告:在此函数中使用了未初始化的“s”[-Wuninitialized]

问题描述

基本上在最基本的层面上,我不明白为什么我不能这样做:

#include <stdio.h>
#include <stdlib.h>

void mal(char *str){
    str = malloc(sizeof(char));
}



int main(void)
{
    char *s;
    mal(s);
    free(s);
    return 0;
}  

解决方法

s 按值传递给函数 mal。在 mal 内部,局部参数 str 被赋值更改,但 s 中的 main 保持未初始化。在 C 中,您应该将指向 s 的指针传递给 mal 以解决此问题:

#include <stdio.h>
#include <stdlib.h>

void mal(char **str){ // pointer to pointer
    *str = malloc(sizeof(char)); // referenced variable behind str changed
}



int main(void)
{
    char *s;
    mal(&s); // pointer to s passed
    free(s);
    return 0;
}