Ошибка при обращении к двумерному массиву char, размещенному в стеке, из другой функции - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Листинг программы
  1. int main() {
  2. char s[2][6] = { "test1\0", "test2\0" };
  3. foo(s);
  4. }
  5. void foo(char** array) {
  6. putchar(arr[0][0]); //ошибка - чтение 0x00000000
  7. }
Листинг программы
  1. int main() {
  2. char** s = (char**)malloc(sizeof(**s) * 2);
  3. s[0] = (char*)malloc(sizeof(*s) * 6);
  4. data[0] = "test1\0";
  5. foo(s);
  6. }
  7. void foo(char** array) {
  8. putchar(arr[0][0]); //ошибки нет
  9. }
Листинг программы
  1. int main() {
  2. char *s[2][6] = { "test1\0", "test2\0" };
  3. foo(s);
  4. }
  5. void foo(char** array) {
  6. putchar(arr[0][0]); //ошибки нет
  7. }
Листинг программы
  1. int main() {
  2. char s[2][6] = { "test1\0", "test2\0" };
  3. putchar(arr[0][0]); //ошибки нет
  4. }
Объясните, пожалуйста, почему так происходит. И почему нет ошибки, если вызвать "putchar(arr[0][0]);" из функции main?

Решение задачи: «Ошибка при обращении к двумерному массиву char, размещенному в стеке, из другой функции»

textual
Листинг программы
  1. int main() {
  2.     char s[2][6] = { "test1\0", "test2\0" };
  3.     foo(s);
  4. }
  5. void foo(char* array[6]) {
  6.     putchar(arr[0][0]);
  7. }

Объяснение кода листинга программы

  1. В функции main() создается двумерный массив char s[2][6] = { test1\0, test2\0 };
  2. Затем вызывается функция foo(s);
  3. В функции foo() передан массив char* array[6]
  4. В функции foo() происходит попытка доступа к элементу массива arr[0][0]
  5. В результате возникает ошибка, так как в функции foo() массив представлен как указатель на массив, а не как двумерный массив.
  6. Поэтому попытка доступа к элементу массива arr[0][0] приводит к неопределенному поведению.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут