问个new/delete的问题
为了启动管理多个不同的线程,我定义了一个结构
{
HANDLE hThread;
LPARAM lParam ;
...
}
lParam是线程需要的数据,有个线程我要传2个字符串进去,用了以下方法:
CString *ptr = new CString[2];
ptr[1] = str1;
ptr[2] = str2;
para.lParam = (LPARAM) ptr;
当希望传入别的数据的时候new其它的类型,在线程内去解析lParam
线程获取/使用这些数据是没有问题的
在线程结束的时候就有问题了,因为需要delete lParam对应的内容
而实际上lParam不一定是什么类型,也许是CString* 也许是 MyStruct*
直接delete [] (char*)lParam 会报错。
如果在开始的时候都统一用char*来申请内存,像下面这样:
char * buf = new char[sizeof(CString)*2];
char * ptr = (CString*)buf;
ptr[1] = str1;
ptr[2] = str2;
这样赋值的时候又会报错。
怎么解决这样的问题比较好呢?
{
HANDLE hThread;
LPARAM lParam ;
...
}
lParam是线程需要的数据,有个线程我要传2个字符串进去,用了以下方法:
CString *ptr = new CString[2];
ptr[1] = str1;
ptr[2] = str2;
para.lParam = (LPARAM) ptr;
当希望传入别的数据的时候new其它的类型,在线程内去解析lParam
线程获取/使用这些数据是没有问题的
在线程结束的时候就有问题了,因为需要delete lParam对应的内容
而实际上lParam不一定是什么类型,也许是CString* 也许是 MyStruct*
直接delete [] (char*)lParam 会报错。
如果在开始的时候都统一用char*来申请内存,像下面这样:
char * buf = new char[sizeof(CString)*2];
char * ptr = (CString*)buf;
ptr[1] = str1;
ptr[2] = str2;
这样赋值的时候又会报错。
怎么解决这样的问题比较好呢?
...全文
相关推荐
专家门诊 Visual C++开发答疑300问源代码.rar
**内存管理**:动态内存分配与释放(new/delete操作)、内存泄漏检测、智能指针的使用等。3. **异常处理**:理解C++的异常机制,如何抛出和捕获异常,以及异常安全的编程实践。4.
Visual C++开发答疑300问
**内存管理**:Visual C++中的动态内存分配和释放是常见问题来源,书里可能讲解了new、delete操作,智能指针,内存泄漏检测和防止方法。6.
cpp代码-何俊问的问题
**内存管理**:包括动态内存分配(new和delete操作)和智能指针(如unique_ptr、shared_ptr)的使用,以防止内存泄漏。10.
专家门诊 Visual C 开发答疑300问的源码
**内存管理**:C++提供了动态内存分配(new/delete)和智能指针等机制,源码可能涵盖这些内容,帮助理解如何有效地管理内存,避免内存泄漏。8.
C++中new/delete与new[]/delete[]的使用区别
释放内存时,顺序与分配相反:```cppdelete ptr1; // 释放由new分配的单个对象delete[] ptr2; // 释放由new[]分配的数组```使用`delete`释放数组会导致未定义行为


