Задача состоит в том, чтобы использовать строковый массив и обращаться к каждой строке, используя индекс. Код работает отлично, но иногда он заканчивается ошибкой сегментации с ошибкой: «Ошибка: невозможно получить доступ к памяти по адресу 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".
Кто-нибудь сталкивался с подобной проблемой в вашем опыте? Любая помощь или подсказка приветствуется.