我正试图将大量数据存储到多个malloc数组中我有三个malloc数组,两个2d char数组和一个int数组。在测试用例中,数组名称定义为:
cres=12163;
catm=41241;
matm = (char**) malloc(catm*sizeof(char*));
for(i=0;i<catm;i++)
matm[i]=(char*) malloc(5*sizeof(char));
mres = (char**) malloc(cres*sizeof(char*));
for(i=0;i<cres;i++)
mres[i]=(char*) malloc(5*sizeof(char));
mrin = (int*) malloc(cres*sizeof(int));
我从文件中读取了数据。存储在这些数组中的数据,如果按存储在这些阵列中的方式打印,则格式正确。但是,当我尝试从字符数组中检索数据时,在为int数组赋值后,字符;数组将列长度更改为14,值设置为8.50000000E-01。
我使用的是Linux Opensuse和g++comiler。
存储大量数据的任何解决方案或替代方法。
很抱歉造成了所有的混乱,我的错误是我把文件处理行指针分配给了所有的值。
因此matm
是长度为catm
的char*
的数组。然后为其元素指定长度为5的char
数组。然后对res
而不是atm
执行相同操作。
最后,在mrin
中分配并存储一个cres
整数数组。
几乎可以肯定的是,您正在溢出其中一个数组。您可以使用valgrind
来确定哪一个,很可能是自动的,只需运行valgrind ./a.out
或任何程序的调用即可。它将打印发生内存错误的堆栈跟踪。
您可能只是拥有长度超过4个字符的字符串(加上终止的null)。您不会在填充数组的位置显示代码。
由于您使用的是C++编译器,因此应该考虑使用像std::vector<char>
和std::string
这样的C++容器,而不是像您发现的那样容易出错的原始C数组。
好的,所以我要尝试一下。。。在C!
您正在制作的是指向char的指针数组。
因此,两个指向char的指针数组,每个数组包含41241个指向char 的指针
一个数组包含指向int的指针(尽管为什么我不知道,因为仅仅声明一个大小为12163的int数组就可以了
此外,您将声明char指针数组上的每个条目为5个字符,其中将包含一个4字节的C风格字符串加上null终止符。
char* strArray1 [41241] ;
char* strArray2 [41241] ;
int* intArray [12163] ;
for( int x=0 ; int < 41241;x++){
strArray1[x] = malloc(5*sizeof(char)) ;
strcopy("fred",strArray1[x]);
}
for( int x=0 ; int < 41241;x++){
strArray2[x] = malloc(5*sizeof(char)) ;
strcopy("Tom",strArray2[x]);
}
for(x=0;x<12163;x++){
inArray[x*] = rand() % 50 ;
}
for( int x=0 ; int < 41241;x++){
printf(" This entry = %s n",strArray1[x]) ;
}
for( int x=0 ; int < 41241;x++){
printf(" This entry = %s n",strArray2[x]) ;
}
for( int x=0 ; int < 12163;x++){
printf(" This entry = %i n",intArray[x*]) ;
}
不要试图和C一起变得可爱,因为它每次都会咬你的屁股。