gpt4 book ai didi

c - C 中释放三维数组时的 SIGTRAP

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

我试图释放一个表示 bmp 图像的三维指针数组,当它编译正常时,我在调试时在 gdb 中收到 SIGTRAP 信号。我的错误消息是

warning: HEAP[bmpsample.exe]:
warning: Heap block at 0061FFB8 modified at 0061FFCC past requested size of c.
Program received signal SIGTRAP, Trace/ breakpoint trap. 0x7787704e5 in ntdll!TpWaitForAlpcCompletion()
from ntdll.dll

当我从 bmp 文件加载值后释放数组时,会发生错误。我的代码如下。

分配:

int ***alloc3D(int xlen, int ylen, int zlen) {
int i, j, ***array;
if ((array = malloc(xlen*sizeof(int**)))==NULL) {
perror("Error in first assignment of 3D malloc\n");
}
// Allocate pointers for each row
for (i = 0; i < xlen; i++) {
if ((array[i] = malloc(ylen*sizeof(int*)))==NULL){
perror("Error in second assignment of 3D malloc\n");
}
// Allocate pointer for each column in the row
for (j=0; j < ylen; j++) {
if((array[i][j] = malloc(zlen*sizeof(int)))==NULL) {
perror("Error in third assignment of 3D malloc\n");
}
}
}

填充数组

int ***readBitmap(FILE *inFile, BmpImageInfo info, int*** array) {
// Pixels consist of unsigned char values red, green and blue
Rgb *pixel = malloc( sizeof(Rgb) );
int read, j, i;
for( j=0; j<info.height; j++ ) {
read = 0;
for( i=0; i<info.width; i++ ) {
if( fread(&pixel, 1, sizeof(Rgb), inFile) != sizeof(Rgb) ) {
printf( "Error reading pixel!\n" );
}
array[j][i][1] = (int)(pixel->red);
array[j][i][2] = (int)(pixel->green);
array[j][i][3] = (int)(pixel->blue);
read += sizeof(Rgb);
}

if ( read % 4 != 0 ) {
read = 4 - (read%4);
printf( "Padding: %d bytes\n", read );
fread( pixel, read, 1, inFile );
}
}
free(pixel);

return array;

}

解除分配

void dealloc3D(int*** arr3D,int l,int m)
{
int i,j;

for(i=0;i<l;i++)
{
for(j=0;j<m;j++)
{
free(arr3D[i][j]);
}
free(arr3D[i]);
}
free(arr3D);
}

我怀疑问题在于将 RGB 值从 unsigned char 转换为 int,但我看不出有其他方法可以做到这一点。如果我只是将整数值分配给分配的数组,则释放它们没有问题。

最佳答案

您的第一个 fread 语句有问题

fread(&pixel, 1, sizeof(Rgb), inFile)

它正在读取指针pixel,而不是读取pixel所指向的内容。此后,任何对pixel的使用都可能会损坏堆(或其他东西)。

关于c - C 中释放三维数组时的 SIGTRAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10043265/

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