При циклическом просмотре значений в символе ** печатаются другие значения, чем при создании.Кроме того, printf, кажется, влияет на вывод - PullRequest
0 голосов
/ 13 апреля 2019

Во время инициализации char** map я печатаю сохраненные значения.Когда я передаю этот указатель в функцию и печатаю значения, вывод ведет себя странно.

Если я не печатаю во время создания другого, тоже не ожидаемого, поведение происходит.Что происходит?

void main(){
  char ** map = (char **) malloc(24);

  int i;
  for(i = 0; i < 24; i++){
    map[i] = (char *) malloc (sizeof(char));
    *map[i] = i;
    printf("%d\n", *map[i]);
  }

    display_map(map);

}

void display_map(char **m){
  int i;
  char bit;
  printf("\n");

  for(i = 0; i < 24 ; i++ ){
     bit = *m[i];
     printf("%d\n", bit);
  }
}

output:
0
1
2
3
.
.
23

48 //expected 0
1
2
3
.
.
23


Если я, однако, удаляю оператор печати при создании char** map, я получаю этот вывод из display_map

output:
32   //expected 0
-96  //expected 1
32   //expected 2
-96  //expected 3
32   //expected 4
5
6
7
8
.
.
23

Это такая загадка дляя.

1 Ответ

1 голос
/ 13 апреля 2019

Изменить это

char ** map = (char **) malloc(24); /* memry allocated 24 char's, but you intended for 24 char pointer */

до

char **map = malloc(24 * sizeof(*map)); /* can use sizeof(char*) but it works for only char type while sizeof(*map) work for all data type */

А это

map[i] = (char *) malloc (sizeof(char));

до

map[i] = malloc(sizeof(**map));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...