在此函数中使用未初始化

cok*_*ude 0 c

我正忙着这个功能.

void GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
         char *strings_operand_table1[], int hex_address_table1[], char *base_label)
{
    int i = 0;
    int cmp_str2 = 0;
    //char label[20] = {0}; 
    //int k = 0; 
    //printf(" i is %s \n", strings_label_table1[1]); 
    for(i = 0; i < 503; i++)
    {
        if(strings_mneumonic_table1[i] != NULL)
        {
            cmp_str2 = strcmp(strings_mneumonic_table1[i], "BASE");
            if(cmp_str2 == 0)
            {
                //printf(" ??please?? \n");
                //printf(" hex_address_table1[i] is %x \n", hex_address_table1[i]);
                //strcpy(label, strings_operand_table1[i]);
                base_label = malloc(strlen(strings_operand_table1[i])+1);
                strcpy(base_label, strings_operand_table1[i]);
                //base_label = strings_operand_table1[i]; 
                break;
            }
        }

    }
    //return label;
} 
Run Code Online (Sandbox Code Playgroud)

这是我的初始变量声明.我把它设为NULL的原因是因为我的警告标志抱怨它没有初始化,当我没有这样做时我有一个分段错误.既然我已经这样做了,我就无法base_label改变.我已经尝试了通常的=方法,只是为了它的地狱我尝试了malloc然后strcpy方法.这两种方法都没有改变价值.

char *base_label = NULL;  
Run Code Online (Sandbox Code Playgroud)

这就是我调用函数的方式.

GetBaseDeclarationLabel(strings_label_table1, strings_mneumonic_table1,
     strings_operand_table1, hex_address_table1, base_label);
Run Code Online (Sandbox Code Playgroud)

Wer*_*nze 8

如果您的函数应分配缓冲区并返回该缓冲区,则需要将函数签名更改为

void GetBaseDeclarationLabel(char *strings_label_table1[], char *strings_mneumonic_table1[],
     char *strings_operand_table1[], int hex_address_table1[], char **base_label);
Run Code Online (Sandbox Code Playgroud)

那你会的

*base_label = malloc(strlen(strings_operand_table1[i])+1);
strcpy(*base_label, strings_operand_table1[i]);
Run Code Online (Sandbox Code Playgroud)

调用者将更改为

char *base_label = NULL;
GetBaseDeclarationLabel(strings_label_table1, strings_mneumonic_table1, strings_operand_table1,
                        hex_address_table1, &base_label);
Run Code Online (Sandbox Code Playgroud)