C++小白又遇到问题了

a220315410 2011-08-29 09:18:29
嘛,发现不知道为什么,只要代码一遇到申请内存的情况,程序就会崩溃,例如:
出现例如 char* data = new char[10];或者 string s = "adc";这样的代码程序就会报错。从调用堆栈来看只要调用new,malloc之类的函数,就会出“SIGABRT:Aborted”的错误,这个是为什么呢?
环境:Ubuntu11.04, Eclipse + CDT
贴上代码:
/*
* Bitmap.h
*
* Created on: 2011-8-26
* Author: ray-ni
*/

#ifndef BITMAP_H_
#define BITMAP_H_

//#pragma pack(2)

typedef unsigned int DWORD;
typedef int LONG;
typedef unsigned short WORD;

/**
* 鏂囦欢淇℃伅澶? */
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER, *PBITMAPFILEHEADER;

/**
* 浣嶅浘淇℃伅澶? */
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER, *PBITMAPINFOHEADER;

/**
* 璋冭壊鏉夸俊鎭? */
typedef struct tagRGBQUAD {
char rgbBlue;
char rgbGreen;
char rgbRed;
char rgbReserved;
} RGBQUAD, *PRGBQUAD;

#define BI_RGB 0L
#define BI_RLE8 1L
#define BI_RLE4 2L
#define BI_BITFIELDS 3L
#define BI_JPEG 4L
#define BI_PNG 5L

//#pragma pack()

class BitmapUtils{
public:
BitmapUtils(int width, int height);
void setColorTable(unsigned char** colors, int size);
void addData(char* data, int length);
void save();

private:
BITMAPFILEHEADER mHead;
BITMAPINFOHEADER mInfo;
PRGBQUAD mColorTable;
int mColorTableSize;
char* mData;
int mDataSize;
};


#endif /* BITMAP_H_ */


/*
* BitmapUtils.cpp
*
* Created on: 2011-8-29
* Author: ray-ni
*/
#include "../head/Bitmap.h"
#include <cstdio>
#include <cstdlib>

BitmapUtils::BitmapUtils(int width, int height) {

char* tmp = new char[10]; //这里出错。。。
//璁惧畾鏂囦欢澶? this->mHead.bfType = 0x4D42;
this->mHead.bfSize = 54;
this->mHead.bfReserved1 = 0;
this->mHead.bfReserved2 = 0;
this->mHead.bfOffBits = 0;
//璁惧畾浣嶅浘淇℃伅
this->mInfo.biSize = 40;
this->mInfo.biWidth = width;
this->mInfo.biHeight = height;
this->mInfo.biPlanes = 1;
this->mInfo.biBitCount = 8;
this->mInfo.biCompression = BI_RGB;
this->mInfo.biSizeImage = 0;
this->mInfo.biXPelsPerMeter = 0;
this->mInfo.biYPelsPerMeter = 0;
this->mInfo.biClrUsed = 0;
this->mInfo.biClrImportant = 0;
}

/**
* 璁惧畾璋冭壊鏉? */
void BitmapUtils::setColorTable(unsigned char** colors, int size) {
this->mColorTableSize = size;
this->mColorTable = new RGBQUAD[size];
for (int i = 0; i < size; i++) {
this->mColorTable[i].rgbBlue = colors[i][0];
this->mColorTable[i].rgbGreen = colors[i][1];
this->mColorTable[i].rgbRed = colors[i][2];
this->mColorTable[i].rgbReserved = 0;
}
this->mHead.bfSize += size * 4;
this->mHead.bfOffBits = this->mHead.bfSize;
}

/**
* 娣诲姞棰滆壊鏁版嵁
*/
void BitmapUtils::addData(char* data, int length) {
this->mData = data;
this->mDataSize = length;
this->mHead.bfSize += this->mInfo.biHeight *((this->mInfo.biWidth +3)/4*4);
}

/**
* 淇濆瓨鏂囦欢
*/
void BitmapUtils::save() {
FILE* file = fopen("./test.bmp", "w+");
fwrite(&this->mHead, 1, sizeof(this->mHead), file);
fwrite(&this->mInfo, 1, sizeof(this->mInfo), file);
fwrite(&this->mColorTable, 4, this->mColorTableSize, file);
char zero = 0 , j = 0;
for (int i = this->mInfo.biHeight - 1; i >= 0; i--) {
j= 0;
while (j < this->mInfo.biWidth) {
fwrite(&this->mData + i * this->mInfo.biWidth, 1, 1, file);
j++;
}
while ((j % 4) != 0) {
fwrite(&zero, 1, 1, file);
j++;
}
}
fclose(file);
delete[] this->mColorTable;
}
...全文
175 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ANT2AUNTH 2011-08-30
  • 打赏
  • 举报
回复
路过…………
低头路过 2011-08-30
  • 打赏
  • 举报
回复
我勒个去。。。linux。。。我表示很受伤
darksmile 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 a220315410 的回复:]

引用 4 楼 jackyjkchen 的回复:

你别用eclipse,直接用gcc不优化试试

ubuntu 11.04……真想开发就别用这个,出了问题搞不清楚是系统还是代码

因为CPU是I5 2300,装10.04的时候,系统没有我集成显卡的驱动。。。
[/Quote]
真想玩Unix/Linux的话,用FreeBSD。这才是正儿八经的东西,比什么尤版图强多了....
另外,喜欢玩Linux就不要在乎什么显卡驱动之类的东东,那么在乎显卡驱动就用Windows吧。
a220315410 2011-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jackyjkchen 的回复:]

你别用eclipse,直接用gcc不优化试试

ubuntu 11.04……真想开发就别用这个,出了问题搞不清楚是系统还是代码
[/Quote]
因为CPU是I5 2300,装10.04的时候,系统没有我集成显卡的驱动。。。
a220315410 2011-08-30
  • 打赏
  • 举报
回复
嘛,问题已经解决,虽然我也不知道是怎么解决的,重写了部分代码就好了,不知道之前错在哪里,虽然问题解决了,但是稀里糊涂的菜鸟表示很无奈。。。
jackyjkchen 2011-08-29
  • 打赏
  • 举报
回复
你别用eclipse,直接用gcc不优化试试

ubuntu 11.04……真想开发就别用这个,出了问题搞不清楚是系统还是代码
luciferisnotsatan 2011-08-29
  • 打赏
  • 举报
回复
char* tmp = new char[10]; //这里出错。。。

这会出错?难道内存用完了?
Jokul_Lee 2011-08-29
  • 打赏
  • 举报
回复
操作了系统没分配给你的内存。。
猜测
hongwenjun 2011-08-29
  • 打赏
  • 举报
回复
只懂点基础,这些高级的用法 看不懂了
帮顶

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧