我正在编写一份C++程序,用于将数据输出到文件中,生成一个Python脚本并调用“pyplot”进行绘图。
然而,当我使用指针作为参数来传递数据时,程序可以被正确编译,但无法运行。它会返回错误。当我使用Xcode的调试模式逐步执行程序时,有时候它会偶尔地给出正确的结果,但并非总是如此。有时它也会返回错误。
我怀疑这可能是由于一些内存分配问题造成的,但我无法确定具体出了什么问题。
我的代码如下所示:
1)主函数
当它运行时,我会收到以下错误消息。
然而,当我使用指针作为参数来传递数据时,程序可以被正确编译,但无法运行。它会返回错误。当我使用Xcode的调试模式逐步执行程序时,有时候它会偶尔地给出正确的结果,但并非总是如此。有时它也会返回错误。
我怀疑这可能是由于一些内存分配问题造成的,但我无法确定具体出了什么问题。
我的代码如下所示:
1)主函数
#include <iostream>
#include <stdlib.h>
#include <cmath>
#include "PyCPlot.h"
using namespace std;
double pi = 3.1415926;
int main(int argc, const char * argv[]) {
int nline = 100;
double * np_list = new double(nline);
double * pack_fraction_np = new double (nline);
for (int i=0; i<nline; i++){
np_list[i] = double(i)/double(nline)*2*pi;
pack_fraction_np[i] = cos(np_list[i]);
}
PyCPlot_data_fout("RandomPacking", nline, np_list, pack_fraction_np);
PyCPlot_pythonscript("RandomPacking", "Random Packing");
PyCPlot_pyplot("RandomPacking", "Random Packing");
return 0;
}
2) 头文件
#ifndef PyCPlot_h
#define PyCPlot_h
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;
int PyCPlot_data_fout(string datafilename, int nline, double * x, double *y){
ofstream fout;
fout.open(datafilename+".txt");
fout << nline << endl;
for (int i=0; i<nline; i++){
fout << x[i] << " " << y[i] << endl;
}
fout.close();
return 0;
}
int PyCPlot_pythonscript(string datafilename, string plttitle){
string strhead = "import numpy as np\nimport matplotlib.pyplot as plt\n";
string strpltfig = "plt.figure()\n";
string strpltplt = "plt.plot(xlist, ylist)\n";
string strplttit = "plt.title('"+plttitle+"')\n";
string strpltshw = "plt.show()\n";
string strfileopen ="f = open('"+datafilename+".txt', 'r')\n";
string strreadline ="size = map(int, f.readline().split())\n";
string strpltlist ="xlist = np.zeros((size))\nylist = np.zeros((size))\n";
string strfor = "for i in range(size[0]):\n xlist[i], ylist[i] = map(float, f.readline().split())\n";
ofstream pyout;
pyout.open("PyCPlot_"+datafilename+".py");
pyout << strhead << strfileopen << strreadline << strpltlist << strfor;
pyout << strpltfig << strpltplt << strplttit << strpltshw;
pyout.close();
return 0;
}
int PyCPlot_pyplot(string datafilename, string plttitle){
string strsystemsh ="source ~/.bashrc; python PyCPlot_"+datafilename+".py";
system(strsystemsh.c_str());
return 0;
}
#endif /* PyCPlot_h */
当它运行时,我会收到以下错误消息。
malloc: *** error for object 0x1002002e8: incorrect checksum for freed object - object was probably modified after being freed.
using namespace std;
。 - Jarod42inline
,以便能够将头文件包含在多个cpp文件中。 - Jarod42