原谅我可能会问一个相当简单的问题,但是插入算子在程序中实际意味着什么呢?(例如cout <</ cin >>)
我现在真的被卡住了......
vmlinuz二进制文件,MBR和BOOTMGR映像等可启动文件都是用纯二进制/机器代码编写的.但它们是从C和汇编编译而来的 - 即linux内核源代码不仅仅由1和0组成,它由C源组成.我如何将我的汇编和C程序编译为一般x86(在我的情况下为x86-32)微处理器范围的机器代码,以便我可以从这些文件启动.
注意:我之前从未遇到过这种规模的问题,并且真的不知道如何解决这个问题,如果我把它弄错了那么请解释我应该如何解决它.如果您不能或不会帮助该计划,我很高兴只是了解这个问题.
我一直在编写一段代码来练习面向对象的编程,但是我遇到了一个我以前从未见过的错误(我已经在这里工作了几个月并且没有花很多时间来学习,因为我的时间浪费在义务教育上).内核本身(显然)用我的代码产生了这个错误.但是运行gdb(带有调试符号)并没有让我知道行号.在printf语句中显示,即使条件不再满足,它也会循环一个while循环?这对我来说似乎很奇怪,因为看起来条件不满足,但它仍然循环.它发生错误(我想)发生这种情况的原因是因为它在"Stack"类中的某个地方为整数数组重新分配负大小的内存 - 但是,当我向Stack :: reloc添加if语句以便防止它重新定位负数组大小它仍然会导致错误.向下看它会显示其他几条信息,(引用gdb):
程序接收信号SIGABRT,已中止.__kernel_vsyscall()中的0x0012d422
我没有从SIGABRT的wiki页面中学到太多东西,我不认为十六进制数对我来说意味着什么.这是我的代码,分为两个类和main:
标题:
#include <cstdio>
#include <cstdlib>
Run Code Online (Sandbox Code Playgroud)
类Stack:
class Stack {
private:
int *stack;
int size;
void init(int *top) {
*top = 0;
}
void push2(int *s,int* top, int element) {
s[(*top)++] = element;
}
int pop2(int *s,int *top) {
return s[--(*top)];
}
void reloc(int diff) {
if ((top+diff)>1) {
realloc(stack, (size+diff));
size = size+diff;
}
}
public:
int top;
Stack() {
init(&top);
size = 100;
stack = (int *)malloc(100 * sizeof(int));
}
void …Run Code Online (Sandbox Code Playgroud)