Ошибка при обращении к двумерному массиву 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] приводит к неопределенному поведению.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д