我有在 Windows 上工作的代码,但现在我使用 Xcode 3.2.5 C/C++ 编译器版本 GCC 4.2 移植到 MAC,它崩溃了。
我已将其范围缩小到 memset 调用。如果我注释掉 memset 它可以工作,如果我把它放回代码崩溃中。
我的头文件中有一个如下所示的结构:
typedef struct
{
int deviceCount;
struct
{
#define MAX_DEVICE_ID 256
#define MAX_DEVICE_ENTRIES 10
std::string deviceId; // Device name to Open
TransportType eTransportType;
} deviceNodes[MAX_DEVICE_ENTRIES];
} DeviceParams;
然后在一个cpp文件中我有这个:
DeviceParams Param;
memset(&Param, nil, sizeof(Param));
...后来我有这个:
pParam->deviceNodes[index].deviceId = "some string"; // <----- Line that crashes with memset
就像我之前说的,如果我删除 memset 调用一切正常。如果我在调用 memset 之前查看调试器,我的结构中的字符串是 \0 并且在 memset 之后它们是 nil。
为什么 nil 字符串会在分配行上崩溃并且只在 MAC 上?
谢谢。