Ошибка сегментации в C коде, скомпилированном с g ++, обращающимся к глобальному двумерному индексу массива символов - PullRequest
0 голосов
/ 27 февраля 2020

Задача состоит в том, чтобы использовать строковый массив и обращаться к каждой строке, используя индекс. Код работает отлично, но иногда он заканчивается ошибкой сегментации с ошибкой: «Ошибка: невозможно получить доступ к памяти по адресу 0x1»

Вытащен фрагмент из большого куска кода для лучшей читаемости.

#include<stdio.h>
#include<stdlib.h>

char str_map[][12] = {
   "abc",
   "def",
   "lmn"
};

char *getStrMapAtIndex(unsigned char index)
{
    if((sizeof(str_map)/sizeof(str_map[0])) <= index) return NULL;
    else return str_map[index];
}

printf("%s\n",getStrMapAtIndex(1));

У меня есть несколько таких карт, определенных в глобальном масштабе. Эта программа работает без проблем каждый раз, когда я выполняюсь на своем локальном компьютере, но через некоторое время cra sh на процессоре krait.

Обратите внимание: карта определена в одном файле вместе с API для возврата указателя на индекс массива, но указатель, используемый в другом файле.

Я попытался выполнить поиск по всему адресу в inte rnet, но не понял, что потенциально может go неправильно с инициализацией глобального массива, ведущей к возврату API адрес "0x1".

Кто-нибудь сталкивался с подобной проблемой в вашем опыте? Любая помощь или подсказка приветствуется.

...