SIGSEGV试图改变字符串结构C时/ C++
问题描述:
typedef struct {
string aPath;
string dPath;
string tmpPath;
int cSet;
int socket;
} threadParams;
的结构,并且这样
string dirPath = "./Maildir/";
string authPath;
string tmpPath = "~/tmpPath/";
林一些变量尝试初始化结构,并添加一些像这样的数据
threadParams *tP = (threadParams*)malloc(sizeof(threadParams));
tP->aPath = authPath;
tP->cSet = cParam;
tP->dPath = dirPath;
tP->socket = commSocket;
tP->tmpPath = tmpPath;
当我用这段代码运行程序时,SIGSEGV信号在执行时试图执行:tP-> aPath = authPat H;当我删除这些结构的字符串成员,并保持只是int变量它没关系,一切工作正常。
谁能告诉我为什么会发生这种情况,以及如何解决它?谢谢
答
当你分配结构时,你只分配了threadparams结构的大小。底层的字符串没有正确构建。在内部,它们是指向未分配内存的指针。如前所述,当创建动态对象时,使用'new'将分配并正确地构造对象及其包含的所有对象元素。
+0
谢谢你们的帮助。 – John
这是C++ not C.使用'new'和'delete'而不是'malloc'和'free'。 –
'这是C++而不是C.' @Captain Obvlious你不知道它。它可以是'typedef char * string;'或'#define string char *' –
@ PeterJ_01实际上,即使使用小代码片段,也很清楚OP很可能尝试从C转换到C++,同时,或将两者混合在一起。这是一个常见的错误,并且确定这里发生的最可能的事情并不难。 –