glibc 检测到 malloc():C 中的内存损坏



我正在尝试在linux下用C语言编译和编写代码,并收到以下错误消息:

glibc 检测到 malloc((:内存损坏

我找不到为什么...

substring(( 只是通过给出起始索引和长度来返回原始字符串的一部分。 例如子字符串("这是示例",0,4( = "this";

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] = '';
    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: %sn",header);
char *cmd = substring(consoleCommand,firstSpace+1,lastSpace-firstSpace-1);
printf("command is: %sn",cmd); // the code only runs up to here and output the error..
char *socketstr = substring(consoleCommand,lastSpace+1,len-lastSpace-1);
printf("socket is: %sn",socketstr);

这是更多信息:控制台命令通常是标准,具有"发送消息 ID"的形式,当消息长度为 12 个字符时会发生错误......例如,"发送此消息 4","此消息"是 cmd,长度为 12 个字符,这给了我错误!它适用于任何其他长度,我已经尝试了 3、4、24...

任何提示将不胜感激,谢谢!

newString[x] = '';

此时x等于 length ,这意味着您在分配的内存末尾之外写入 1 个字符。您需要为另一个字符分配空间。

没有为终止''字符分配任何空间,因此溢出分配以写入此字符。 您还需要将此字符计入您的分配中:

char *newString = (char *)malloc((length + 1) * sizeof(char));

相关内容

  • 没有找到相关文章

最新更新