小编bob*_*obo的帖子

Win32 API防止待机

什么是Win32 api函数阻止系统进入待机状态?

有些程序使用它,这在我看来非常烦人.

我知道你可以捕获一些WM_SYSCOMMAND消息,以防止屏幕保护程序出现..

c++ winapi shutdown standby

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

方括号阵列

可能重复:
数组名是C中的指针吗?

所以,我通常使用指针声明数组.

但是,您也可以使用方括号表示法声明数组:

char a[] = "ok" ;
char b[] = "to" ;
char *pa = a ;

cout << "a " << sizeof( a ) << endl ;   // 3
cout << "pa " << sizeof( pa ) << endl ; // 4
Run Code Online (Sandbox Code Playgroud)

奇怪的是,sizeof( a )将是以字节为单位的数组的实际大小,而不是指针大小.

我发现这很奇怪,因为指针在哪里呢?方括号声明的数组实际上是一种带(sizeof(char)*numElements)字节的数据结构吗?

此外,您无法将a重新分配给b:

a = b ; // ILLEGAL.
Run Code Online (Sandbox Code Playgroud)

这是为什么?似乎a 是数组而不是指向数组的指针("左操作数必须是l值"a = b上面的错误).是对的吗?

c++ arrays square-bracket

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

传递线程例程多个变量和堆栈大小

在Web上的示例中,对CreateThread的调用通常会传递指向struct的指针LPVOID lpParameter,并使用该指针来访问struct本身.

#include <Windows.h>
#include <stdio.h>

struct Point
{
  float x,y,z ;
} ;

DWORD WINAPI threadStartPoint( LPVOID data )
{
  Sleep( 1000 ) ;
  Point *p = (Point*)data ;
  printf( "%f %f %f\n", p->x, p->y, p->z ) ;
  puts( "Thread job done" ) ;
  return 0 ;
}

// From main
int main()
{
  DWORD threadId ;
  Point p ;
  p.x=2, p.y=3, p.z=4 ;
  HANDLE handle = CreateThread( 0, 0, 
    threadStartPoint,
    (LPVOID)&p,
    0,  // ?? …
Run Code Online (Sandbox Code Playgroud)

c++ windows multithreading

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

这效率低吗?

扩展这个问题,我想使用我认为的val,因为它们是"应该"的,

#include <stdio.h>
enum E{ A, B, C } ;

#define inc(enVal) (*((int*)&enVal))++

int main()
{
  E t = A ;
  inc( t ) ;
  printf( "t %d\n", t ) ;
}
Run Code Online (Sandbox Code Playgroud)

现在呃,t是一个枚举类型E的变量,我有一个宏inc,它将值增加t1,

那么这个宏(并且可能是其他用于标记检查的宏)的效率要比使用它的效率低得多int t吗?

c++ int enums

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

从函数返回堆分配指针是不礼貌的吗?

之前boost::shared_ptr,从函数返回堆分配指针被认为是一种不好的做法,因为调用者需要记住free()该对象吗?

或者,它被认为是"正常"?

c c++ pointers heap-memory

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

C++中的operator()

我有一个背后有数学函数的对象.它似乎是一个完美的候选人operator().

特别是它对于球体上的每个(phi,theta)位置具有不同值的光.

现在的问题是,当在类中时,访问light函数具有这种蹩脚的语法:

    double operator() ( double phi, double theta )
    {
        // compute light function 
        return sin(2*t) * cos(p) ; // (really this is implemented as a function pointer,
                                   // so the light function can be changed)
    }

    void functionThatUsesLightFunction()
    {
         double val = ( 2.0, 4.0 ) ;  // seems bad // Whoops!  Doesn't work.
         double val2 = (*this)( 2.0, 4.0 ) ; // ok
         double val3 = operator()( 2.0, 4.0 ) ; // no thank …

c++ operator-overloading

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

为什么在这里返回malloc指针导致"HEAP CORRUPTION"免费?

注意:请取消关于"C++?使用std :: string!"的评论..这个问题是使用C字符串,但更多的是关于内存管理而不是字符串.

我有这个功能

char* strclone( char* src )
{
    char* dst = (char*)malloc(strlen(src+1));
    strcpy(dst,src);
    return dst;
}
Run Code Online (Sandbox Code Playgroud)

该函数应该用于分配新指针(in strclone),将src中的字符串写入其中,并返回新字符串的地址.

但是,当字符串为freed时,稍后在程序中:

str = strclone( some_str_variable );    
// ..code..
free( str ) ; //! ERROR!  
Run Code Online (Sandbox Code Playgroud)

错误如下:

调试错误!程序:C:\ ...... HEAP CORRUPTION DETECTED:在正常块(#39713)之后的0x090CC448.CRT检测到应用程序在堆缓冲区结束后写入内存.

错误发生在我free( str )在程序中调用的行.如果我将str的赋值更改为:

str = (char*)malloc( strlen( some_string_variable ) +1);
strcpy( str, some_string_variable ) ;
//...
free( str ) ; //fine now
Run Code Online (Sandbox Code Playgroud)

然后没有错误,程序功能完美.

为什么strclone功能不能按预期工作?

c c++ string memory-management

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

如何从std :: vector中恢复内存?

可能重复:
如何缩小std :: vector的大小?
C++ vector :: clear

当我调用vector<double>::clear()一些大尺寸的矢量时,我看不到内存在任务管理器/性能中返回到系统.

显然这是因为容器希望你再次使用相同的内存.一旦任务完成,我将不会再次使用该内存,并且内存将更好地返回到系统.

有没有一种方法,以确保立即内存返回到系统,比其他使用类似指针vector<double> * v/调用deletev,当我们想要的记忆又回到了这个系统?

c++ memory stl vector

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

₧符号用于什么?

在ASCII中,符号158是₧.

这个符号代表什么,它用于什么?

ascii

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

如果我已经手动线程化我的应用程序,我应该使用C++ AMP吗?

我不确定C++ AMP有什么用处.如果我已经多线程化我的应用程序(在这种情况下,光线跟踪器)来使用系统上的所有n个核心,我应该使用C++ AMP,还是这会产生更多的瓶颈?(当它尝试多线程时,所有CPU核心已经100%使用,)

c++-amp

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