SIZE = 2*1024*1024*1024;
struct
{
char array[SIZE];
} s1;
char *seq;
File *sp;
int i = 0;
EoFReached = 0;
memset(array,0,SIZE*sizeof(char));
while(EoFReached == 0) {
getseq(sp, seq, EoFReached);
memcpy(&(s1->array[i]),seq, seqlen);
i = i + seqlen;
}
在 i 值为 630511104 之后,memcpy 在数组本身的开头用一些错误的值覆盖了一些值,但同时结束值是正确的。
所以厌倦了动态分配内存而不是静态分配,使用 malloc。
但得到了分割法鲁特后630511104GDB 中的错误消息为
__memcpy_ssse3 () 在 ..sysdeps/x86_64/multiarch/memcpy-ssse3.S:" ../sysdeps/x86_64/multiarch/memcpy-ssse3.S:没有这样的文件或 目录。
你把 2 GB 大 s1 放在堆栈上,没有那么大。尝试将 s1 与 new 一起分配:
struct fred { char array[SIZE]; }; fred * s1 = new fred;