小编s_i*_*bhu的帖子

确定C中动态分配的内存的大小

有没有办法在C中找出动态分配内存的大小?

例如,之后

char* p = malloc (100);
Run Code Online (Sandbox Code Playgroud)

有没有办法找出与之相关的内存大小p

c memory size allocation dynamic

56
推荐指数
6
解决办法
7万
查看次数

删除一个NULL指针在写入析构函数时不会调用重载删除

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
运算符删除

c++ destructor memory-management

16
推荐指数
2
解决办法
2776
查看次数

write()到stdout和printf输出没有交错?

#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后出现,而不是随后的读取.为什么会这样?

c printf stdout

7
推荐指数
1
解决办法
7万
查看次数

来自stdin的read()不会忽略换行符

我使用以下条件语句来读取标准输入.

if ((n = read(0,buf,sizeof(buf))) != 0)
Run Code Online (Sandbox Code Playgroud)

当从标准输入输入数据时,通常用户在完成时按下输入.但read()在这种情况下n = 1也将'\n'视为输入,并且条件不会评估为false.当用户在标准输入上按下enter(不输入任何内容)而不检查buf的内容时,是否有办法使条件计算为false.除了read()我可能用于此目的之外还有其他功能吗?

就此而言,当输入来自标准输入(stdin)时,读取什么方式可以确定输入结束?

c stdin newline input

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×3

allocation ×1

c++ ×1

destructor ×1

dynamic ×1

input ×1

memory ×1

memory-management ×1

newline ×1

printf ×1

size ×1

stdin ×1

stdout ×1