其原因可能是堆被损坏,这说明.exe 中或它所加载的任何 DLL 中有 Bug。
HANDLE textheap = HeapCreate(NULL,0,0);
HANDLE charheap = HeapCreate(NULL,0,0);
head = (text *)HeapAlloc(textheap,HEAP_ZERO_MEMORY,sizeof(text));
DWORD j=0,cc=0;
text *temp = (text *)HeapAlloc(textheap,HEAP_ZERO_MEMORY,sizeof(text));
head->next = temp;
for(i=0;p[i]!=EOF;i++)//p是整个txt内存里的首地址,用heapalloc申请。
{
for(;p[i]=='\n'&&p[i+1]!='\n';)
{temp->data = (char*)HeapAlloc(charheap,HEAP_ZERO_MEMORY,i-j+1);
cc = j;
for(DWORD c=0;c<(i-j);c++)
{
temp->data[c] = p[cc+1];
cc++;}
temp->data[cc+1] = '\0';j = i;
if(p[i+1]==EOF)
break;
text *tail = (text *)HeapAlloc(textheap,HEAP_ZERO_MEMORY,sizeof(text));
temp->next = tail;
tail->prev = temp;
temp = tail;
break;}
}
按照步骤调试过了,并不是立刻出现这个提示,而是调试到i = 90多,再次申请堆的时候出现这个提示。CreateHeap的时候第三个参数指定0不是确定这是个可以无限增大的堆了吗?
另外,我在用纯API写richEdit,感觉用链表来储存段太耗资源,用数组到后面插入光标确定行列修改什么的计算量超级大,各位有什么好逻辑么?