为什么我的C中大型1D阵列出现访问冲突错误?

我正在读取一个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

任何帮助将不胜感激。预先谢谢你。

liulinjian123 回答:为什么我的C中大型1D阵列出现访问冲突错误?

我的问题已解决。问题出在下一行

public interface FooBarRepository extends CrudRepository<FooBar,FooBarPk> {
}

“ strdup” duplicates the string并且从未被释放,这就是为什么堆内存被增量消耗的原因,因为我看到此应用程序在任务管理器中将其达到1.6GB左右。我删除了这一行,因为它没有做任何事情,并且我的代码工作正常。但是谢谢大家对我的查询的答复。

本文链接:https://www.f2er.com/3152812.html

大家都在问