我的C程序中出现以下错误:
Writing to heap after end of help buffer
你能告诉我我错过了什么吗?
char * path_delimiter(char * path)
{
int i = 0, index = 0, size = 0, length = (int)strlen(path);
char *tmp, *ans;
for(; i < length; i++) {
if(path[i] == PATH_DELIM[0]) {
break;
}
}
i++;
size = (int)strlen(path) - i;
ans = (char*)malloc(sizeof(path));
tmp = (char*)malloc(size);
strcpy(ans,path);
ans[i-1] = END_ARRAY;
if(size > 0)
{
strcpy(tmp,&path[i]);
realloc(path,size);
strcpy(path,tmp);
}
else
{
strcpy(path,ans);
}
free(tmp);
return ans;
}
Run Code Online (Sandbox Code Playgroud)
这个 ...
sizeof(path)
Run Code Online (Sandbox Code Playgroud)
... 是相同的 ...
sizeof(char *)
Run Code Online (Sandbox Code Playgroud)
...这是指针的大小(不是它所指向的缓冲区的大小),所以大约是4.
所以这 ...
ans= (char*)malloc(sizeof(path));
Run Code Online (Sandbox Code Playgroud)
...是一个4字节的缓冲区,所以...
strcpy(ans,path);
Run Code Online (Sandbox Code Playgroud)
...正在覆盖(写完那个缓冲区).
代替 ...
malloc(sizeof(path));
Run Code Online (Sandbox Code Playgroud)
......我想你想......
malloc(strlen(path)+1);
Run Code Online (Sandbox Code Playgroud)
你是不是检查,如果malloc和realloc成功.更重要的是,realloc可能会返回您要丢弃的不同句柄.
此外,你有:
ans = malloc(sizeof(path));
...
strcpy(ans, path);
Run Code Online (Sandbox Code Playgroud)
在今天最常见的平台上,sizeof(path)无论字符数组的长度如何,最有可能是4或8 path.
| 归档时间: |
|
| 查看次数: |
425 次 |
| 最近记录: |