小编Dpp*_*Dpp的帖子

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

什么是"int*a =(int [2]){0,2}};" 到底怎么办?

当我看到这种符号时,我感到非常惊讶.它是做什么的,它是什么样的C概念?

c

10
推荐指数
2
解决办法
521
查看次数

为什么编译器允许字符串文字不是const?

内存中的文字究竟在哪里?(见下面的例子)

我不能修改文字,所以它应该是一个const char*,虽然编译器允许我使用char*,即使有大多数编译器标志也没有警告.

虽然const char*类型的隐式转换为char*类型给了我一个警告,见下文(在GCC上测试,但它在VC++ 2010上的行为类似).

另外,如果我修改一个const char的值(下面有一个技巧,GCC会更好地给我一个警告),它没有给出任何错误,我甚至可以修改并在GCC上显示它(尽管我猜它仍然是未定义的行为,我想知道为什么它没有对文字做同样的事情).这就是为什么我问这些文字存储在哪里,以及哪些更常见的const应该存储?

const char* a = "test";
char* b = a; /* warning: initialization discards qualifiers 
  from pointer target type (on gcc), error on VC++2k10 */

char *c = "test"; // no compile errors
c[0] = 'p'; /* bus error when execution (we are not supposed to 
  modify const anyway, so why can I and with no errors? And where is the 
  literal stored for I have a "bus error"? 
  I have 'access …
Run Code Online (Sandbox Code Playgroud)

c c++ memory standards

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

为什么我不能乘以浮动?

可能重复:
处理浮点数中的精度问题

我很惊讶为什么我试图在C中使用浮点数(使用GCC 3.2)并且它没有按照我的预期进行.作为示例:

int main() {
  float nb = 3.11f;
  nb *= 10;
  printf("%f\n", nb);
}
Run Code Online (Sandbox Code Playgroud)

显示:31.099998

我对浮动的实现方式及其产生这种意外行为的原因感到好奇吗?

c floating-point floating-accuracy

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

C++,Java和JavaScript异常处理有什么区别?

它们是非常不同的语言,它们处理异常的方式可能会有所不同.如何实现异常处理以及这些语言中的实现差异是什么?

我也问这个问题,因为我注意到与JavaScript版本相比,C++异常处理似乎非常慢.

javascript c++ java exception-handling exception

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

编译器优化,线程安全?

我有一个关于编译器可能做的优化的问题.

下面的代码将说明一下(这是一个例子):

typedef struct  test
{
  short i;
}               s_test;

int function1(char *bin)
{
  s_test foo;

  lock(gmutex);
  foo.i = *(int*)bin * 8;
  unlock(gmutex);

  sleep(5);
  //
  // Here anything can happen to *bin in another thread
  // an inline example here could be: *(volatile int *)bin = 42;
  //

  int b = foo.i + sizeof(char*);

  return (b > 1000);
}
Run Code Online (Sandbox Code Playgroud)

编译器是否可以替换最后一行

return ((*(int*)bin * 8 + sizeof(char*)) > 1000);
Run Code Online (Sandbox Code Playgroud)

似乎没有使用-O2或-O3与gcc 4.4的情况,但是其他编译器和其他编译标志可能是这种情况吗?

c compiler-construction compiler-theory compiler-optimization visual-c++

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

LLDB 可以在 *(&function+offset) 上中断吗?

我习惯使用 GDB,并且有一个等效的功能我无法在 LLDB 中找到。我希望能够在距函数基地址的某个偏移量处放置一个断点。使用 GDB 我可以做到:

b *(&functionX+20)

有没有办法用 LLDB 做到这一点?

debugging gdb lldb

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

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

整个对象是否通过非虚拟析构函数和基类指针释放?

如果基类没有虚拟析构函数(例如为了避免 vtable 条目)并且派生类只有基本属性,那么当基类的指针被删除时,它是否会释放 new 分配的所有内存?我知道派生类的析构函数不会被调用,但我想知道整个对象分配的内存是否会被释放?我还假设在派生指针上调用删除将释放整个内存空间。

另外,如果它不释放派生类的内存部分,那么在相同的情况下,它如何使用基类中的虚拟析构函数来知道要释放多少内存

例子:

class Base {
  public:
    int a;
    int b;
   Base() {}
  ~Base() {}
};

class Derived : public Base {
  public:
    int c;
    int d;
    Derived() {}
    ~Derived() {}
};

int main() {
  Base *p = new Derived();
  delete p; // is memory allocated for Derived freed?
}
Run Code Online (Sandbox Code Playgroud)

c++ destructor delete-operator

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

Mac OS X:启用了NX标志,堆栈Cookie和ASLR的应用程序?

我想知道一个可执行文件是否支持常见的安全保护,如NX标志,堆栈cookie或ASLR.似乎ASLR设置在操作系统级别,但您如何知道它已启用?在Windows上,某些可执行文件不支持ASLR,因此我想知道如何在Mac OS X上确定这一点.

unix architecture compiler-construction security macos

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

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

如何让GDB在每次系统或库函数调用时中断?

我想在不指定所有系统或库函数的名称或地址的情况下执行此操作。

我基本上想使用 gdb 作为 strace 或 ltrace,但可以实时查看堆栈或内存地址。

谢谢!

c c++ debugging gdb

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

Linux和物理和虚拟CPU

如何找出linux机器使用的cpu数量(对于应用程序和整个系统)以及它们是物理的还是虚拟的?

unix linux

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