错误来自哪里?Valgrind/C/插入字符串
对于我的一个项目,我必须制作新版本的函数insertString,您可以看到以下代码: 这个函数总是给我期望的结果,(我做了一些单元测试),但是主要的问题是:即使它在我的IDE(编译等)中工作,它也不会通过使用Valgrind的单元测试,有人能看到错误吗错误来自哪里?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
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';