Я написал небольшую программу на Mac OS X, но я получаю следующее сообщение об ошибке в следующей функции:Ошибка: KERN_INVALID_ADDRESS по адресу: 0x0000000000000000 0x00007fff99b359c4 в strstr()
Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000 0x00007fff99b359c4 in strstr()
/*
* attrvalue(): parse an attribute value pair.
*
* takes a string of the form "ATTRIBUTE = VALUE" and returns the atrribute name
* and value as seperate strings
*
*/
int
attrvalue(char *entry, char **attr, char **value)
{
char *copy;
char *p;
if (!entry || *entry == '\0')
return 1;
copy = strdup(entry);
*attr = strtok(copy, "=");
*value = strtok(NULL, "\n");
/* strip training whitespace from attr and value */
p = strstr(*attr, " ");
if(p)
*p = '\0';
p = strstr(*value, " ");
if(p)
*p = '\0';
return (0);
}
Любая идея, что неправильно с этой функцией здесь?
Спасибо.
В отладчике вы должны проверить значение '* attr' и' * value'. Я привык к консоли GDB - в консоли вы можете ввести команду 'up' до тех пор, пока вы не окажетесь в правильном стеке стека (фрейм для' attrvalue', а не 'strstr'), затем введите' p * value' или 'p * attr', чтобы увидеть значение, переданное' strstr() ', и посмотреть, является ли это значение' NULL'. Я уверен, что есть также способ сделать это через графический интерфейс. –
Спасибо Дитриху, это очень полезно. – user2059593
Да, если вы хотите больше всего учиться, отстрел отладчика, вероятно, лучше, чем мой ответ. :) –