Я пытаюсь скомпилировать и написать код, написанный на C под linux, и получил это сообщение об ошибке: glibc обнаружено malloc(): повреждение памяти, и я не могу понять, почему ...glibc обнаружено malloc(): повреждение памяти в C
Подстрока() просто возвращает часть оригинальной строки, указав начальный индекс и длину. например подстрока («это пример», 0,4) = «это»;
char *substring(char* str, int start, int length) {
char *newString = (char *)malloc(length * sizeof(char));
int i, x = 0;
int end=start+length-1;
for(i = start ; i <= end; i++){
newString[x++] = str[i];
}
newString[x] = '\0';
return newString;
}
и getCharIndexFirst() просто возвращает индекс первого совпадения заданного полукокса getCharIndexLast() просто возвращает индекс последнего совпадения заданного полукокса
и ниже является основной функцией:
//consoleCommand has the form of 'send MESSAGE ID', has the value from stdin
int firstSpace = getCharIndexFirst(consoleCommand,' ');
int lastSpace = getCharIndexLast(consoleCommand,' ');
int len = strlen(consoleCommand);
char *header = substring(consoleCommand,0,firstSpace);
printf("header is: %s\n",header);
char *cmd = substring(consoleCommand,firstSpace+1,lastSpace-firstSpace-1);
printf("command is: %s\n",cmd); // the code only runs up to here and output the error..
char *socketstr = substring(consoleCommand,lastSpace+1,len-lastSpace-1);
printf("socket is: %s\n",socketstr);
Вот еще информация: consoleCommand обычно STDIN, имеет форму «отправить сообщение ID», ошибка возникает, когда сообщение 12 голец долго ... , например. 'отправить это сообщение 4', 'это сообщение' является cmd и имеет длину 12 символов, это дает мне ошибку! , и он отлично работает для любой другой длины, я пробовал 3, 4, 24 ...
Любой намек будет оценен, СПАСИБО!
Научитесь использовать [valgrind] (http://valgrind.org/) и скомпилировать все предупреждения и debug ingo (например, 'gcc -Wall -g'). Используйте отладчик 'gdb'. –