我正在为windows命令行编写一个基于控制台的小应用程序。
我为两个数组分配内存,chi
和chi_comp
如下:
/* allocating memory for chi */
if ((chi = (int *)malloc(cm * sizeof(int))) == NULL)
{
printf("Error allocating %i bytes of memory.\n", lm * sizeof(int));
return CMD_NONE;
}
/* allocating memory for chi_comp */
if ((chi_comp = (int *)malloc(cm * sizeof(int))) == NULL)
{
printf("Error allocating %i bytes of memory.\n", cm * sizeof(int));
return CMD_NONE;
}
稍后在代码中我初始化了它们
for (i = 0; i < cm; i++)
{
chi[i] = -1;
chi_comp[i] = -1;
}
像这样使用它们
chi[grade] = i;
chi_comp[i] = grade;
和
if (chi_comp[i] != -1)
{
printf(" %i ", v[chi_comp[i]][0]);
}
与它们一起工作很好,但是当我在不需要内存的情况下试图释放内存时,程序不再崩溃。
free(chi);
free(chi_comp);
使用gdb进行调试的结果如下:
警告:堆[m.exe]:
警告:在003518B8处的堆块在003518CC处修改,超过请求的c大小
程序接收到信号SIGTRAP,跟踪/断点陷阱。
ntdll中的0x776f0b2d!rtlpentnumeratesubkey()
从C:\ Windows\system32\ntdll.dll
在本例中,chi的值
003518C0
和chi廑comp的值003518E8
最佳答案
从错误消息:
警告:HEAP[m.exe]:警告:在003518B8处的堆块在003518CC处修改,超过请求的c大小
我怀疑你的密码有点越界了,所以请检查一下你的柜台。告诉我的是过去要求的大小。确保你读了两遍错误信息,这是为了你自己好。:)
下次你发帖的时候,一定要提供一个你被咬的最小例子。
关于c - 用信号SIGTRAP免费崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34852335/