可能的重复:
堆栈增长方向
堆栈是向上还是向下增长?
大家好,
我怎样才能知道机器的堆栈是否在C内存中增长或减少.更重要的是,哪个更好:堆栈增长的系统还是堆栈增长的系统?
以下逻辑工作???
void sub(int *a)
{
int b;
if (&b > a) {
printf("Stack grows up.");
}
else
{
printf("Stack grows down.");
}
}
main ()
{
int a;
sub(&a);
}
Run Code Online (Sandbox Code Playgroud)
我的意思是这个表达式在C中有效
if (&b > a)
Run Code Online (Sandbox Code Playgroud) 我已经编写了自己的Stack和Queue实现,但我已经使它们专门用于整数.我深知Java实现的,java.util.Stack和java.util.Queue,但我这样做是为学习经验......只是想学习新的东西.我如何制作这些通用实现,以便我可以在Stack/Queue中存储任何对象,而不仅仅是整数?
以下是代码,但我也欢迎所有关于改进的批评和建议.我想知道我做得很好以及我做得不好.
public class StackNode {
public Integer value;
public StackNode() {
this.value = null;
}
public StackNode(StackNode node) {
this.value = node.value;
}
public StackNode(Integer data) {
this.value = data;
}
}
Run Code Online (Sandbox Code Playgroud)
/**
* Stack Data Structure.
*
* A Stack is a last in, first out (LIFO) data structure. A Stack can have any abstract data type as an element, but is
* characterized by two fundamental operations: …Run Code Online (Sandbox Code Playgroud) 我在工作中经历了一些代码,我发现了这一点
inline
FLAGS get_flags(void) {
FLAGS res;
memset(&res, 0, sizeof(res));
return res
}
Run Code Online (Sandbox Code Playgroud)
这是在程序中包含的头文件中声明的.我意识到,如果没有内联,因为这是在堆栈上分配的,这将是一件非常糟糕的事情.我们从未遇到过相关代码的问题,但我对此感到好奇.
我已经阅读了所有关于此类问题的问题,但我无法修复我的问题.问题是我使用一个函数从文件中读取数据,我得到这个错误:"堆栈变量'p'被破坏了"这是函数
Firm readFirm(char* name)
{
FILE* file = NULL;
int i = 0;
Firm firm;
char line[100];
char* p[5] = {(char*)malloc(50)};
char tmp[50];
strcpy(tmp,name);
strcat(tmp,".txt");
file = fopen(tmp,"rb");
getline(file,line,100);
strcpy(firm.name,line);
getline(file,line,100);
strcpy(firm.EIK,line);
getline(file,line,100);
split(p,line," ");
for (i = 0 ; p[i] != NULL; i++)
firm.price[i] = atoi(p[i]);
getline(file,line,100);
split(p,line,".");
firm.day = atoi(p[0]);
firm.month = atoi(p[1]);
firm.year = atoi(p[2]);
fclose(file);
return firm;
}
Run Code Online (Sandbox Code Playgroud)
请帮助,因为我不知道如何解决它!
这是拆分功能:
char ** split( char *result[], char *w, const char *delim)
{
int i=0;
char *p=NULL;
for(i=0, …Run Code Online (Sandbox Code Playgroud) 我找到了一些代码来实现堆栈的C实现,并决定使用它.但是,有几个typedef,我很难在stackT中打印值(实际上是一个char数组).下面是代码.我究竟做错了什么?
#include <stdio.h>
#include <stdlib.h>
typedef char stackElementT;
typedef struct {
stackElementT *contents;
int maxSize;
int top;
} stackT;
void StackInit(stackT *stackP, int maxSize) {
stackElementT *newContents;
newContents = (stackElementT *)malloc(sizeof(stackElementT)*maxSize);
if (newContents == NULL) {
fprintf(stderr, "Not enough memory.\n");
exit(1);
}
stackP->contents = newContents;
stackP->maxSize = maxSize;
stackP->top = -1; //empty...
}
void StackDestroy(stackT *stackP) {
free(stackP->contents);
stackP->contents = NULL;
stackP->maxSize = 0;
stackP->top = -1; //empty
}
int StackIsEmpty(stackT *stackP) {
return stackP->top < 0;
}
int StackIsFull(stackT … 此代码是否返回对堆栈上分配的变量的无效引用?或者是什么:
void *f(size_t sz) {
return alloca(sz);
}
Run Code Online (Sandbox Code Playgroud)
或者这是一个由alloca实现/编译器支持处理的特殊情况f(alloca(size), alloca(size))?
char * s;
s[400] = 'd';
Run Code Online (Sandbox Code Playgroud)
如果它不是未定义的行为,那么这是否意味着我不能随意访问堆栈外部RAM的任何部分?所以每次操作系统启动一个进程时,它都会分配一个RAM区域,我可以在那里做一些讨厌的东西(mallocs除外),因为操作系统会在进程完成后清理堆栈.
为什么操作系统在进程结束后无法清理堆?这是否意味着堆与所有其他进程共享?
如果我在堆栈中放入太多数据,那就是缓冲区溢出,但是我可以放入多少堆栈?是OS绑定,RAM大小绑定还是CPU缓存绑定?
我正在尝试在Perl中实现一个堆栈,我有一个数组.我想推送数组上的项目,弹出项目并打印出新的数组,如下所示:"1,2,3,5,6
我怎样才能做到这一点?我的代码只是将数字6添加到数组的顶部.
#!usr/bin/perl
@array = 1..5;
push @array, 6; #Push the number 6 into the array
pop @array, 4; #Pop the number 4 out of the array
print "The array is now $array[-1].\n";
Run Code Online (Sandbox Code Playgroud)