Pointers C++;编译器将指针初始化为null

Pointers C++;编译器将指针初始化为null,pointers,memory,null,allocation,Pointers,Memory,Null,Allocation,所以我已经被一个记忆问题困扰了好几天了。 我有一个多线程程序运行C++。我初始化一个双*指针。 根据我的阅读和以前的编程经验,指针被初始化为垃圾。如果您将其初始化为0,或者如果您为程序分配的内存太多,则它将为Null。对我来说,我的指针初始化,没有分配,给我一个空指针。 我编写的解析器函数假定返回指向已解析信息数组的指针。当我调用函数时 double* data; data = Parser.ReadCoordinates(&storageFilename[0]); 现在,返回的数组指

所以我已经被一个记忆问题困扰了好几天了。 我有一个多线程程序运行C++。我初始化一个双*指针。 根据我的阅读和以前的编程经验,指针被初始化为垃圾。如果您将其初始化为0,或者如果您为程序分配的内存太多,则它将为Null。对我来说,我的指针初始化,没有分配,给我一个空指针。 我编写的解析器函数假定返回指向已解析信息数组的指针。当我调用函数时

double* data;
data = Parser.ReadCoordinates(&storageFilename[0]);
现在,返回的数组指针应该设置为data。然后我尝试从数组中打印出一些内容。我得到内存损坏错误。我已经运行了gdb,它给了我一个内存损坏错误:

*** glibc detected *** /home/user/kinect/openni/Platform/Linux/Bin/x64-Debug/Sample-NiHandTracker: free(): corrupted unsorted chunks: 0x0000000001387f90 ***
*** glibc detected *** /home/user/kinect/openni/Platform/Linux/Bin/x64-Debug/Sample-NiHandTracker: malloc(): memory corruption: 0x0000000001392670 ***
有人能给我解释一下发生了什么事吗?我尝试将指针初始化为全局指针,但也不起作用。我试图分配内存,但仍然出现内存损坏错误。解析器可以工作。我用一个简单的程序进行了测试。所以我不明白为什么它在我的另一个程序中不起作用。我做错了什么?如果需要,我还可以提供更多信息

解析器代码

双*csvParser::ReadCoordinates(char*文件名){

int x;//计数器
int size=0//
字符*数据;
int i=0;//计数器
FILE*fp=fopen(文件名,“r”);
如果(fp==NULL){
perror(“打开文件时出错”);
}
while((x=fgetc(fp))!=EOF){//返回内部文件位置指示符当前指向的字符
size++;//csv文件中的字符数
}
倒带(fp);//将位置指示器设置为文件的开头
printf(“大小为%d.\n”,大小);//打印
data=new char[23];//每行有23个字节(字符)长
大小=(大小/23)*2;//x,y坐标数
coord=new double[size];//为坐标数组分配内存,需要在某处释放
num\u coord=size;//num\u coord是公共的
//FGET(数据、大小、fp);
//printf(“数据为%c.\n”,*数据);

for(x=0;x在数组或向量的边界之外写入时,会发生内存损坏。
它被称为(取决于它在哪一边)

堆的分配数据已损坏,因此您看到的症状是free()或new()调用中出现异常。
您通常不会得到访问冲突,因为内存已分配且属于您,但它由堆的逻辑使用


找到您可能在数组边界之外写入的位置。

请发布更多代码。例如,Parser.ReadCoordinates如何分配内存…或者在
valgrind
下运行您的程序,或者发布足够的代码让我们复制该问题。哇,感谢大家这么快的响应。我理解您的意思使用损坏的内存错误。但是,我不知道为什么会出现此错误。我已添加了解析器代码。但是,我认为我无法附加所有代码,因为文件太多。在其中一个循环中超出了界限
int x;              //counter
int size=0;         //
char* data;
int i = 0;          //counter

FILE *fp=fopen(filename, "r");


if (fp == NULL){
 perror ("Error opening file");
}

while  (( x = fgetc(fp)) != EOF ) {  //Returns the character currently pointed by the internal file position indicator
    size++;     //Number of characters in the csv file
}

rewind(fp);                         //Sets the position indicator to the beginning of the file
printf("size is %d.\n", size);      //print

data = new char[23];                //Each line is 23 bytes (characters) long
size = (size/23) * 2;               //number of x, y coordinates


coord = new double[size];           //allocate memory for an array of coordinates, need to be freed somewhere

num_coord = size;                   //num_coord is public

//fgets (data, size, fp);
//printf("data is %c.\n", *data);

for(x=0; x<size; x++){
    fgets (data, size, fp);
    coord[i] = atof(&data[0]);          //convert string to double
    coord[i+1] = atof(&data[11]);       //convert string to double
    i = i+2;
}


delete[] data;

fclose (fp);

return coord;