Ошибка при обращении к двумерному массиву char, размещенному в стеке, из другой функции - C (СИ)
Формулировка задачи:
int main() { char s[2][6] = { "test1\0", "test2\0" }; foo(s); } void foo(char** array) { putchar(arr[0][0]); //ошибка - чтение 0x00000000 }
int main() { char** s = (char**)malloc(sizeof(**s) * 2); s[0] = (char*)malloc(sizeof(*s) * 6); data[0] = "test1\0"; foo(s); } void foo(char** array) { putchar(arr[0][0]); //ошибки нет }
int main() { char *s[2][6] = { "test1\0", "test2\0" }; foo(s); } void foo(char** array) { putchar(arr[0][0]); //ошибки нет }
int main() { char s[2][6] = { "test1\0", "test2\0" }; putchar(arr[0][0]); //ошибки нет }
Решение задачи: «Ошибка при обращении к двумерному массиву char, размещенному в стеке, из другой функции»
textual
Листинг программы
int main() { char s[2][6] = { "test1\0", "test2\0" }; foo(s); } void foo(char* array[6]) { putchar(arr[0][0]); }
Объяснение кода листинга программы
- В функции main() создается двумерный массив char s[2][6] = {
test1\0
,test2\0
}; - Затем вызывается функция foo(s);
- В функции foo() передан массив char* array[6]
- В функции foo() происходит попытка доступа к элементу массива arr[0][0]
- В результате возникает ошибка, так как в функции foo() массив представлен как указатель на массив, а не как двумерный массив.
- Поэтому попытка доступа к элементу массива arr[0][0] приводит к неопределенному поведению.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д