c - 为什么这段代码在释放指针时给出运行时异常

标签 c runtime

我有简单的代码,

#include "stdafx.h"
#include <malloc.h>
int main()
{
  char *p = (char*) malloc(10);
  p = "Hello";

  free(p);

  return 0;
}

此代码在终止时给出运行时异常。以下是最简单的错误,


Microsoft Visual C++ 调试库

调试断言失败!

程序:...\我的文档\visual studio 2010\Projects\samC\Debug\samC.exe 文件:f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c 线路:1322

表达式:_CrtIsValidHeapPointer(pUserData)

有关您的程序如何导致断言的信息 失败,请参阅有关断言的 Visual C++ 文档。

(按重试调试应用程序)

中止重试忽略

最佳答案

p = "Hello"; 使 p 指向字符串文字并丢弃先前分配的值。您不能 free 字符串文字。您无法修改它。

如果你想让p保存那个字符串,只需使用

char* p = "Hello";

char p[] = "Hello";

如果您打算修改它。

两者都不需要免费

关于c - 为什么这段代码在释放指针时给出运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14214761/

相关文章:

c - 如何在 Lex 和 Yacc 中获取整个输入字符串?

java - 是否有可能知道java中CPU的最大速度(MHZ)?

Java多态练习

bash - 设置运行时路径,从 vim 中的表达式添加目录?

c++ - 将静态 C 库与 C++ 代码链接时出现 "undefined reference to"错误

c - 如何在几秒钟内打印线程的生命周期?

c - 将指针的二维数组传递给函数 C 的不同方法

c - 限制发送队列中udp数据包的数量

c# - 在运行时创建标签

ruby - 无法安装 Ruby Gems 3.0.3