关于new delete函数
楼主是小白想知道一下代码哪里有问题
#include"stdio.h"
#include"string.h"
int main(int argc, char* argv[])
{ char *a=new char;
gets(a);
printf("%s\n",a);
delete[](a);
return 0;
}
错误对话框截屏:
如果不写结尾的delete,执行就是成功的。
[解决办法]
new/delete;
new[]/delete[];
配着用,别串着用。
[解决办法]
char *a=new char;
a指针指向的内存,有效大小只有1字节
gets(a);
一个空字符串大小1字节,多一个字符就多一个字节
delete[](a);
在调试模式下,系统在执行delete时发现你使用了不属于你的内存,报错
在发布模式下,这里不会报错,而会在另一个看起来一点关系都没有的地方出更大的错
[解决办法]
new和delete new [] 和delete []这是必须要匹配的。有时new和delete[]也不一定会报错,这跟编译器的实现有关。
[解决办法]
int main(int argc, char* argv[])
{
char *a=new char[100];
gets(a); // a的长度最长为100
printf("%s\n",a);
delete[] a;
return 0;
}
#include"stdio.h"
#include"string.h"
int main(int argc, char* argv[])
{
char *a = new char[10];// 这样才是配套使用啊
gets(a);
printf("%s\n", a);
delete[] a;
return 0;
}