小编Yua*_*Wen的帖子

malloc():内存损坏

这是我认为可能导致此错误的简化程序.

char *p = (char*)malloc(8192);
for(int i = 0; i < 9200; ++i){
  p[i] = '1';
}
char *s = (char*)malloc(strlen(p)); 
Run Code Online (Sandbox Code Playgroud)

原始项目相当复杂,所以我简化了它.我使用malloc分配了8192个字节.然后我的程序将超过8192个字符写入数组.然后我将使用malloc分配内存.

这个迷你程序没有崩溃.但在最初的大项目中,它崩溃了这个错误:

malloc():内存损坏:0x0000000007d20bd0***

什么可能导致这种差异?

c linux memory-management

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

Derived类占用多少空间?如果它自己和它的基类都有虚拟方法?

我正在使用vs2013(Win32)测试以下程序:

#include <iostream>

class A {
    virtual void funA();
};

class B {
    virtual void funB();
};

class C :public A{
    int i;
    virtual void funC();
};

class D :public B, C{
    virtual void funD();
};

int main(){
    std::cout << "size A " << sizeof(A) << std::endl;
    std::cout << "size B " << sizeof(B) << std::endl;
    std::cout << "size C " << sizeof(C) << std::endl;
    std::cout << "size D " << sizeof(D) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

结果是

尺寸A 4 …

c++ inheritance

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

为什么有些人在一个函数中声明了extern函数?

我需要维护一些其他人编写的代码.我只是遇到了在一个函数内声明并在别处定义的许多函数.例如:

int func(){
    ...
    extern func1();
    extern func2();
    ...

}
Run Code Online (Sandbox Code Playgroud)

他们为什么声明和定义这样的函数?为什么他们不在外面声明函数?有什么好处?

c function extern

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

c参考语义在调用者的代码中不明确

任何人都能解释一下吗?

旧行C程序员有时不喜欢引用,因为它们提供了调用者代码中不明确的引用语义.

c c++

0
推荐指数
1
解决办法
440
查看次数

在 Linux 中的不同线程之间缓冲 `printf` 输出

这是我的代码:

#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <pthread.h>

pthread_t ntid;void
printids(const char *s) {
  printf("%s \n", s);
}

void *
thr_fn(void *arg)   {
  printids("new thread: ");
  return((void *)0);
}

int
main(void)  {
  pthread_create(&ntid, NULL, thr_fn, NULL);
  printids("main thread:");
}
Run Code Online (Sandbox Code Playgroud)

我在 Red Hat Enterprise Linux Workstation 版本 6.5 上运行它。
这是我的编译命令

gcc -ansi -g -std=c99 -Wall -DLINUX -D_GNU_SOURCE threadid.c -o threadid -pthread -lrt -lbsd

这是输出:

主线程:
新线程:
新线程:

为什么“新线程”已打印两次?我怀疑这可能与 Linux 中的缓冲机制有关。但是在我添加fflush(stdout)fsync(1)在每个函数的末尾之后。输出几乎相同。

如果您多次运行该程序。输出不同:

主线程:
新线程:

或者

主线程:
新线程: …

c linux multithreading buffering

0
推荐指数
1
解决办法
648
查看次数

派生类的构造函数调用的函数不应在基类中是纯虚拟的

我有一个基类和许多派生类。

派生类的构造函数都需要调用reset()具有相同签名的函数。结果,我想virtual void reset() = 0在基类中将纯虚函数声明为Interface。

但是,问题是:

不应在Constructor中调用虚函数。

但是我想reset()成为基类提供的接口。这样所有派生类都必须分别实现reset。

我该怎么办?

c++ constructor pure-virtual

0
推荐指数
1
解决办法
51
查看次数

为什么不能保证赋值的成本低于构造函数析构函数对?

在Scott Meyers的"Effective C++"中第26项:尽可能推迟变量定义,赋值的成本肯定不会低于构造函数 - 析构函数对.

然后,对于不同的数据类型或类,如何将赋值的成本与构造函数 - 析构函数对进行比较?哪一个会更便宜?为什么?

在我看来,构造函数 - 析构函数对需要分配和释放内存,而构造函数至少会初始化变量.但是赋值只需要改变变量的值.

所以,我认为一般来说,赋值的成本应该小于构造函数 - 析构函数对.

c++ constructor destructor assignment-operator

-1
推荐指数
1
解决办法
196
查看次数

在bash shell中,如何分类(),(()),[],[[]]和{}的用法?

我是Shell的新手。而且我)用的使用(糊涂一点点,[],{}像shell脚本$()[ [] ]${}等等。我想对它们的用法进行分类,以更有效地学习shell脚本。

linux bash shell

-2
推荐指数
1
解决办法
3428
查看次数