void replaceChar(char* str, char chr, char* new_str) { int str_len = strlen(new_str); int len = strlen(str); for (int i = 0; i < len; i++) { if (str[i] == chr) { str = realloc(str, len + str_len); memmove(str + i + strlen(new_str), str + i + 1, len - i - 1); memcpy(str + i, new_str, strlen(new_str)); len += strlen(new_str) - 1; } } } int main() { char *buf = strdup("hello123456"); printf("buf=%s\n", buf); replaceChar(buf, 'o', "aaaaaaaaaaaaaa"); printf("buf=%s\n", buf); free(buf); return 0; }为什么这段代码会异常
时间: 2024-02-14 15:22:31 浏览: 137
SQL Server数据表和数据库
这段代码会异常的原因是 realloc 函数可能会改变指针 str 所指向的内存地址,导致原来的指针变成了野指针,从而引发访问非法内存的错误。在循环中,每次调用 realloc 都可能改变 str 的指向,因此在使用 str 时就可能出现问题。此外,还有可能出现内存泄漏的问题,因为每次调用 realloc 都会分配新的内存,但是之前分配的内存并没有被释放。另外,这段代码还存在一个潜在的问题,就是在使用 memcpy 函数时并没有考虑新字符串和旧字符串的长度关系,可能会出现内存越界的错误。
阅读全文