我有简单的代码,
#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/