C++小白又遇到问题了
出现例如 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;
}
相关推荐
C++洛谷 1049 装箱问题.cpp
【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题.cpp【C++】洛谷 1049 装箱问题
中国邮递员问题CPP
问题描述:Chinese poster-man problem,简称CPP,给出一张连通图,问经过每条边至少一次且起点和终点相同,所需走的最小路程。 无向图CPP 1.考虑当所有点度数均为偶数时,该图是欧拉图,因此任意一条欧拉回路都是答案 2.当有两个点是奇度点的时候,只需找到这两点间的最短路径,将最短路径上的边计入到原图中,这是得到了一张欧拉图(poj 1237 The Postal W
【C++】CMake集成abseil-cpp的实战指南:从配置到常见问题解决
本文详细介绍了如何在C++项目中通过CMake集成abseil-cpp,从基础配置到常见问题解决。涵盖环境准备、源码级集成、静态/动态链接选择以及性能调优等实战技巧,帮助开发者高效利用abseil-cpp的高性能组件如字符串处理和哈希表。
C++23迁移中Abseil-CPP符号未定义问题的根源与解决方案
在C++项目升级过程中,ABI(应用程序二进制接口)稳定性是确保不同编译单元间二进制兼容性的核心概念。其原理在于编译器对函数签名、类型布局等生成一致的底层表示。当C++标准演进时,标准库内部实现(如std::string、std::string_view)的优化与调整可能破坏既有ABI,导致依赖其底层细节的第三方库出现链接错误。这一问题的技术价值在于,理解ABI兼容性是构建大型、稳定C++系统的基石,尤其在混合编译环境与持续集成中至关重要。应用场景广泛存在于基础库升级、编译器工具链切换及跨团队二进制交付。本
leetcode答案-cpp-leetcode:C++中流行的leetcode问题的答案
leetcode 答案cpp-leetcode C++ 中流行的 leetcode 问题的答案


