有没有办法在C中找出动态分配内存的大小?
例如,之后
char* p = malloc (100);
Run Code Online (Sandbox Code Playgroud)
有没有办法找出与之相关的内存大小p?
class Widget
{
public:
Widget() {
cout<<"~Widget()"<<endl;
}
~Widget() {
cout<<"~Widget()"<<endl;
}
void* operator new(size_t sz) throw(bad_alloc) {
cout<<"operator new"<<endl;
throw bad_alloc();
}
void operator delete(void *v) {
cout<<"operator delete"<<endl;
}
};
int main()
{
Widget* w = 0;
try {
w = new Widget();
}
catch(bad_alloc) {
cout<<"Out of Memory"<<endl;
}
delete w;
getch();
return 1;
}
Run Code Online (Sandbox Code Playgroud)
在此代码中,析构函数存在时delete w不会调用重载delete运算符.如果省略析构函数,delete则调用重载.为什么会这样?
输出~Widget()时的输出
operator new
Out of Memory
未写入Widget()时的输出
operator new
Out of Memory
运算符删除
#include <stdio.h>
#define MAXLEN 256
int main() {
int n;
char buf[MAXLEN];
while((n = read(0,buf,sizeof(buf))) != 0){
printf("n: %d:",n);
write(1,buf,n);
}
return 1;
}
Run Code Online (Sandbox Code Playgroud)
程序的输出(第一个read和第一个write由用户键入并由终端回显)是:
read
read
write
write
n: 5:n: 6:
Run Code Online (Sandbox Code Playgroud)
printf的输出在标准输入处按Ctrl + D后出现,而不是随后的读取.为什么会这样?
我使用以下条件语句来读取标准输入.
if ((n = read(0,buf,sizeof(buf))) != 0)
Run Code Online (Sandbox Code Playgroud)
当从标准输入输入数据时,通常用户在完成时按下输入.但read()在这种情况下n = 1也将'\n'视为输入,并且条件不会评估为false.当用户在标准输入上按下enter(不输入任何内容)而不检查buf的内容时,是否有办法使条件计算为false.除了read()我可能用于此目的之外还有其他功能吗?
就此而言,当输入来自标准输入(stdin)时,读取什么方式可以确定输入结束?