<p>问题中的代码和OP的答案中的代码存在严重的问题,这些问题可能会导致程序在长期内崩溃。在</p>
<h2>(一)</h2>
<pre><code>resulta[x].cpt1 = <char**> malloc (sizeof (char**)*2)
</code></pre>
<p><code>cpt1</code>是指向(一组)字符指针的指针。因此,应将其指定为</p>
^{pr2}$
<p>(更好的是,如果长度总是<code>2</code>,那么在结构定义中分配<code>char *cpt1[2]</code>,而不需要<code>malloc</code>它。)</p>
<p>这不太可能引起真正的问题,因为所有指针的大小都相同,但仍然是错误的。在</p>
<h2>2) (真正的问题a部分)</h2>
<pre><code>resulta[x].cpt1[0] = <char*> malloc (sizeof (char)*simRes[1][0].__len__()+1)
# ...
resulta[x].cpt1[0] = <char*>some_python_string
</code></pre>
<p>在这里,您分配了一些内存,如果您愿意让指针指向Python字符串所拥有的不同内存区域,则会立即忘记已分配的内存。您不需要做的是将Python字符串中的数据复制到分配的内存中。在</p>
<h2>3) (真正的问题b部分)</h2>
<pre><code>str1 = simRes[1][0].encode('UTF-8')
resulta[x].cpt1[0] = <char*> str1
</code></pre>
<p><code>cpt1[0]</code>指向的内存归<code>str1</code>所有。{6}如果你的cd6结构已经被释放了,那么稍后你的程序就会释放一些无效的数据。在</p>
<p>如果您可以保证<code>str1</code>将比您的结构寿命长(例如,您的结构被用作一个C函数调用的参数),那么这是可以的,但在一般情况下,它可能不是</p>
<p>解决方案是将内容或<code>str1</code>复制到新分配的内存中:</p>
<pre><code>resulta[x].cpt1[0] = <char*> malloc (sizeof (char)*len(simRes[1][0])+1)
strcpy(resulta[x].cpt1[0],str1)
</code></pre>
<hr/>
<p>(另外,你还记得要<code>free</code>你所有的记忆,对吗?)在</p>