错误来自哪里?Valgrind/C/插入字符串

错误来自哪里?Valgrind/C/插入字符串,c,unit-testing,valgrind,C,Unit Testing,Valgrind,对于我的一个项目,我必须制作新版本的函数insertString,您可以看到以下代码: 这个函数总是给我期望的结果,(我做了一些单元测试),但是主要的问题是:即使它在我的IDE(编译等)中工作,它也不会通过使用Valgrind的单元测试,有人能看到错误吗 char * insertString(const char * src, int insertPosition, const char * toBeInserted,int insertLength) { size_t outputS

对于我的一个项目,我必须制作新版本的函数insertString,您可以看到以下代码:

这个函数总是给我期望的结果,(我做了一些单元测试),但是主要的问题是:即使它在我的IDE(编译等)中工作,它也不会通过使用Valgrind的单元测试,有人能看到错误吗

char * insertString(const char * src, int insertPosition, const char * toBeInserted,int insertLength)
{
    size_t outputSize=stringLength(src)+(size_t)insertLength;
    char* output=malloc(sizeof(char)*(outputSize+1));
    int i;

    if(output==NULL)
    {
        fatalError("error during memory allocation in InsertString");
    }

    for(i=0;i<insertPosition;i++)
    {
        output[i]=src[i];
    }
    for(i=0;i<insertLength;i++)
    {
        output[i+insertPosition]=toBeInserted[i];
    }
    for(i=0;i<=insertLength;i++)
    {
        output[i+insertPosition+insertLength]=src[insertPosition+i];
    }

    output[outputSize]='\0';
    return output;

}
char*insertString(const char*src,int insertPosition,const char*toBeInserted,int insertLength)
{
size\u t outputSize=stringLength(src)+(size\t)insertLength;
char*output=malloc(sizeof(char)*(outputSize+1));
int i;
if(输出==NULL)
{
fatalError(“在InsertString中分配内存时出错”);
}

对于(i=0;i终止条件,
i您得到了什么错误?您是否确定例如
i+insertPosition+insertLength
小于
outputSize
?或者
insertPosition+i
小于
src
的大小?另外,最后一个循环中的循环条件看起来可疑。感谢您的回答,i+insertPosition+insertLength更小。我在最后一个循环中做了一些更改,我认为问题来自于此!我尝试了,但它成功了,我甚至不知道为什么我将此条件放在那里…但是我花了大约1个小时没有找到它…谢谢:)
for(i=0;i<=insertLength;i++)
{
    output[i+insertPosition+insertLength]=src[insertPosition+i];
}
for(i=0;i<=strlen(src)-insertPosition;i++)
{
    output[i+insertPosition+insertLength]=src[insertPosition+i];
}
char* tmp = output;

for(i=0;i<insertPosition;i++)
{
    *tmp++ = *src++;
}
for(i=0;i<insertLength;i++)
{
    *tmp++ = *toBeInserted++;
}
for(i=insertPosition;i<=strlen(src);i++)
{
    *tmp++ = *src++;
}

*tmp++ = '\0';