Я столкнулся с несколькими проблемами при использовании указателей и статических массивов. Я застрял в этой ошибке:strlen pointer vs array
void LZWCompress(FILE* file, char minCodeSize, char *pixels, int area)
{
int k = ++minCodeSize, i, len = DEFAULT, jump = 0, dicLen;
lzwDict *dictionary = NULL, *s, *temp;
char *curr, next[2], *buffer;
dicLen = initializeDictionary(&dictionary, minCodeSize);
for(i = 0; i < area; i++)
{
if(dicLen + 1 >= pow(2, k))
k = k + 1;
curr = (char*) malloc(sizeof(char) * DEFAULT);
curr[0] = pixels[i];
curr[1] = '\0';
printf("strlen %lu %s\n", strlen(curr)); ### strlen(curr) = 0 ? WH ? ###
if((i + 1) > area)
{
//outputs curr
break;
}
len = len + 1;
jump = jump + 1;
next[0] = pixels[i + jump];
next[1] = '\0';
buffer = (char*) malloc(sizeof(char) * len);
printf("%lu %lu %lu \n", strlen(buffer), strlen(curr), strlen(next)); ### prints out "0 0 1" ###
(...) код продолжается, и я получаю Прервать ловушку из-за этой проблемы
buffer = strcat(curr, next);
HASH_FIND_STR(dictionary, buffer, s);
if(s)
{
printf("YOLO\n");
do{
jump = jump + 1;
if(i + jump >= area)
exit(-1);
printf("%d \n", len);
curr = (char*) realloc(curr, sizeof(char) * len); ### Here i get Abort Trap 6 ###
(...) код продолжает
Почему Я получаю ожидаемые результаты, когда я использую массив (следующий [2]), а не когда я использовал указатель (* curr, * buffer).
Я использую OSX Yosemite, если это необходимо.
Каковы ожидаемые результаты и конкретная ошибка? – jruizaranguren
Этот код ужасен. Что он должен делать? – trojanfoe