gpt4 book ai didi

c - 为什么我的 C 语言大型一维数组出现访问冲突错误?

转载 作者:行者123 更新时间:2023-11-30 16:11:03 25 4
gpt4 key购买 nike

我正在读取一个 csv 文件(第一列中有数据,但有多行)。为此,我必须初始化一个 vector 来存储数据。这对于小文件来说效果很好,但对于大文件来说,这样的文件没有。行数为 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 的第 900 万个值左右,而最大值应为 10210672。P.S:我的电脑是 64 位,RAM 32GB。我正在使用 Visual Studio 2010 和 C 语言。 My error screenshot is attached

由于堆栈的限制,我也尝试在堆上分配内存,但同样的问题仍然存在。这就是我初始化堆数组 const char** token_vector = (char**)malloc((filesize)*sizeof( char*) ); 的方式它不接受单*紫苑棒。当我将其声明为堆数组时,如下所示

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

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

最佳答案

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

 token_vector[index] = strdup(token);

“strdup”duplicates the string并且永远不会被释放,这就是堆内存被逐渐消耗的原因,因为我看到该应用程序在任务管理器中达到了大约 1.6GB。我已经删除了这一行,因为它没有做任何事情,而且我的代码工作正常。但谢谢大家回答我的问题。

关于c - 为什么我的 C 语言大型一维数组出现访问冲突错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58728700/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com