首页 > 解决方案 > 警告:在此函数中未初始化使用“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;
}  

标签: cmemorymemory-managementmemory-leaksmalloc

解决方案


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

#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;
} 

推荐阅读