c-c++

int p[10];p指针常量

int *p;变量

int p[10][10];   特点:p=*p=p[0],而p+1=p[1],p[0]+1=p[0][1];

int *p[10];   特点: p[0]装的指针;指针数组

int (*p)[10]; 数组指针,可以=p[][];

int **p;可以指向int *p[10];但是不能指向int p[10][10]


int **p初始化为:p=new int *[10];

p[0] =new int;

p[1] = *(p+1)   而不是*p+1。



线程死掉,代码没崩掉,有可能是AB锁相互锁住了

编译代码时候,需要注意编译头文件的先后顺序,以及依赖关系。2.最好在.cpp文件中调用头文件的东西,头文件之间不要相符调用(class容易出现头文件之间的调用,可以使用void *在头文件,在CPP中进行转换,这样头文件也能避免相互调用)

int **data;//存储二维 数组指针(指向指针的指针。date=x[0][0]的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维 数组
//以下实现如何申请内存
data = new int *[row];
for (int k = 0; k < row; k++)
{
data[k] = new int[col];
}
//赋值跟普通二维 数组一样 例如
data[0][0] = 5; //将二维 数组1行1列赋值为5
//删除内存
for (int i = 0 ; i < row; ++i)
{
delete [] data[i]; //此处的[]不可省略
}
delete [] data;

内存泄露其实很好解决。只是很难发现罢了。我们一个 线程 不要 直接 杀死有分配内存的线程,而是让他自然结束并释放内存。在对象的析构函数进行释放内存。对对象分配内存一定要在结束时释放掉。

2、string a;
char c[]="fafjldfjafka";
a+="df"+c+"ldf";//错误,不能使用char指针给string。但是char *可以转换为string.a+="df"+(string)c+"ldf";

3、atof(将字符串转换成浮点型数)
atoi(将字符串转换成整型数)
atol(将字符串转换成长整型数)
strtod(将字符串转换成浮点数)
strtol(将字符串转换成长整型数)
strtoul(将字符串转换成无符号长整型数)
toascii(将整型数转换成合法的ASCII 码字符)
toupper(将小写字母转换成大写字母)
tolower(将大写字母转换成小写字母)
4、关于STL:
volatile(const) vector<int> a;
a.at(3);将会出错。对于一些函数没有对应的volatile定义的。
5、关于STL:
两个线程同时使用如:map<int char*> a;
(1) 两个线程同时使用find,end,等一些列函数会导致代码崩溃。因此需要加锁。
(2)两个线程使用同一个内存。在 读取完成之前,不能释放内存,并且读取完成前不能写入(注意控制),否则奔溃,也 应该加锁。
(3)请不要互相加锁:ALOCK...lockb...AUNLOCK_unlockb。locka..locka..unlocka..unlocka可能导致 连环锁,不能继续向下运行。
(4) lockb一定要unlock,不要遗漏因为跳转或者返回而未解锁的情况。
6、windows的锁:
RTL_CRITICAL_SECTION aeiRxInfoMapLock;
::InitializeCriticalSection(&aeiRxInfoMapLock);
::EnterCriticalSection(&aeiRxInfoMapLock);
::LeaveCriticalSection(&aeiRxInfoMapLock);
::DeleteCriticalSection(&aeiRxInfoMapLock);
而同一线程使用进入锁-进入锁不会堵塞。linux还未测试。

7、关于虚函数,纯虚函数。实现在继承类中。

目的是为了使用一个对象的基类来调用不同的继承类的方法,是为了调用的简洁性。

8、关于继承:class A{};class B: public A{};(1)定义一个新的B对象,可以转换为A对象,还可以再从A转换回来。(2)但是如果定义一个A对象,可以转换为B对象但是此时操作到B对象的成员变量,将在释放空间时崩溃。从基类转换到子类时,一定要是(1)种情况。

9、HEAP[ScreenBeamCMS.exe]: HEAP: Free Heap block 78452f0 modified at 7845958 after it was freed

出现这个错误不定地方,原因应该是分配内存释放内存后对该内容赋值了,我出现的地方时在new的时候,new的时候内核发现该空间已经被占用,报错。

10.

#include <stdio.h>
#include <pthread.h>
#include <iostream>
using namespace std;

class surApp
{
public:
    surApp(){printf("%s,%d\n",__FILE__,__LINE__);pthread_create(&myThreadID, NULL, myThread, (void *)this);}
private:
    static void *myThread(void *inpD)
    {
        printf("%p,%s,%d\n",inpD,__FILE__,__LINE__);    
    }
    static surApp tApp;
    static surApp *pApp;
    static int dataApp;
    pthread_t myThreadID;
    
};

surApp surApp::tApp;
surApp *surApp::pApp = NULL;
int surApp::dataApp = 1;

int main()
{
    printf("%s,%d\n",__FILE__,__LINE__);
}

执行后:

class initmain.cpp,8
main.cpp,19
第一:tApp是静态,对外可以直接使用surApp::tApp,surApp surApp::tApp;是定义该变量,会执行其构造函数。

第二:main调用前要初始化全局变量,而surApp surApp::tApp;将先执行。

第三:pthread_create(&thread_id_my, NULL, thread_process_my, (void *)this);如果线程是类的成员函数,需要将thread_process_my设置为static。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值