这段c++代码中,重新分配内存的方式有什么问题?

想要实现一个功能,即给一个字符串扩容,我想出的代码如下:

#include<iostream>
using namespace std;

int main() {
    char *s="\0";
    int n = strlen(s);
    float x = 4.5;
    char buf[64];
    sprintf(buf, "%.2f\0", x);
    s = (char*)realloc(s, sizeof(char)*(n + strlen(buf) + 1));
    strcat(s, buf);
    system("pause");
}

我想先定义一个空字符串s,然后使用sprintf把数字转换为字符串,然后重新分配内存,再把原来的和数字字符串连接起来,不过程序报错,也没看出来vs提出了什么错误。
先多谢大神指教!

阅读 2.6k
1 个回答

realloc内部会free(s), free一个不由malloc分配的内存是未定义行为。一般会segfault。

如果你不是用windows,这个问题可以用valgrind检查。我不知道vs能不能检查这个。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题