我正在读取一个csv文件(第一列中有数据,但有多行)。为此,我必须初始化一个向量来存储数据。这对于较小的文件有效,但对于较大的文件(例如,没有此文件)有效。行号为10210672,它给出了内存访问冲突错误。我已经如下初始化数组。
char *token_vector[filesize];
这是我正在读取csv文件的地方。
while(index<(file_npdws-1)
{
pick = abs(pick-1);
(pointer = fgets(byte_temp,sizeof(byte_temp)*2,file));
if(pointer!=NULL)
{
token= strtok(pointer,",");
token_vector[index] = strdup(token);
}
noofpulses++;
index++;
//printf("\n Total Pulses : %d",noofpulses);
}
这是错误的出处,即我读取此数组并将其转换为十进制的地方
for(j = 0;j<file_npdws-1;j++)
{
OV[i] = (hex2dec(token_vector[j][20])*16+hex2dec(token_vector[j][21])*1);
i++;
}
i和j的误差约为第9百万分之一,而最大值应达到10210672。 附言:我的电脑是64位,RAM 32GB。我正在使用带有C语言的Visual Studio 2010。 My error screenshot is attached
由于堆栈的限制,我也尝试在堆上分配内存,但是同样的问题仍然存在。
这就是我初始化堆数组const char** token_vector = (char**)malloc((filesize)*sizeof( char*) );
的方式,它不接受单个* aster-stick。
当我将其声明为如下的堆数组
const char* token_vector = (char*)malloc((filesize/2)*sizeof( char*) );
我在构建代码时出错:intellisense:表达式必须具有指针到对象的类型。我在行中收到此错误
OV[i] = (hex2dec(token_vector2[k][20])*16+hex2dec(token_vector2[k][21])*1);
See my error screenshot
任何帮助将不胜感激。预先谢谢你。