在增加2D数组的大小之后,变量会发生变化

时间:2019-04-07 10:27:02

标签: c

一个单词被写入2D数组的第0行和第0列。当我调整数组大小以准备存储另一个单词时,我将该单词存储在第0行和第0列中的temp变量中。在我调用增加2D数组大小的函数后,临时变量变成了非常奇怪的东西。例如,我传入了“ i”,然后增加行的大小后,存储i的变量temp发生了变化。为什么会这样?

void make_row_decode_structure_bigger(int rows){
    printf("inside the making the rows bigger \n");
    int max_rows = rows+1;

    char **store = realloc( decode_structure, sizeof *decode_structure * (rows + 2) );
    printf("after a store has been assigned\n");    
    if (store){ 
        decode_structure = store;
        for(size_t i = 0; i < 2; i++ ){

            decode_structure[rows + i] = calloc(20, sizeof(char));
        }
    }
    printf("end of making the rows increase\n");
    return;
    //decode_structure[max_rows][0] = '\0';
}

//other part of code
char* temp;
        strncpy(temp, decode_structure[0], 20);
        printf("this word %s is at the top of decode_structure\n", temp);
        printf("make the rows bigger is being called\n");
        make_row_decode_structure_bigger(num);
        printf("temp after make_row_decode_structure_biggeris called %s \n", temp);

这是输出:

这个词我在decode_structure的顶部 使行更大被称为 里面使行更大 分配商店后 增加行数的结尾 make_row_decode_structure_biggeris之后的温度称为««

1 个答案:

答案 0 :(得分:2)

这里:

char* temp;
strncpy(temp, decode_structure[0], 20);

您使用未初始化的指针作为副本的目标,该指针将调用未定义行为(UB)。

改为使用char temp[20];,或者如果您确实想要一个指针,则使用malloc动态分配由指针指向的内存,如下所示:char* temp = malloc(sizeof(char) * 20);