我不知道我在哪里出错了,任何帮助都会有所帮助.我试图用2个不同的字符串数组制作一副牌并将其打印到控制台.编译很好,但是当我运行它时,我得到"Segmentation fault(core dumped)"
/*
* BlackJack.c
*
* Created on: Feb 25, 2014
* Author: Danny Hunn
* 25 Feb 14 builds a deck for Black Jack
*/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#define NUM_SUITS 4
#define DECK_SIZE 52
#define NUM_RANKS 13
void swap(char *first,char *second)// swapping pointers
{
char temp = *first;
*first = *second;
*second = temp;
}
void shuffle(char *deck[])
{
int seed, gen, i;
seed = (int) time(0);
srand(seed);
for(i =0; i < …Run Code Online (Sandbox Code Playgroud) 我想反转堆栈,因此顶部的元素应该为零,反之亦然。我知道这样做可能不是正确的操作,但我想这样做。如果没有,我想知道为什么这不起作用
当我做
List<string> MyList = new List<string>();
MyList.Reverse()
Run Code Online (Sandbox Code Playgroud)
有用。但不是这个。
Stack<string> MyStack = new Stack<string>();
MyStack.Reverse()
Run Code Online (Sandbox Code Playgroud)
有什么想法/解决方案吗?
感谢和问候,
加内什
我需要使用堆栈计算 n 的阶乘,并且我编写的代码不返回任何结果。我也不知道 pop stack 真正做了什么(它的第二个参数是什么)所以我只是在那里使用了一个随机值。我使用int **x;是因为我不知道该放什么pop(&mystack,*x);。
#include <iostream>
using namespace std;
int n;
int aux;
int aux1;
int aux2;
int **x;
typedef struct {
int content[100];
int top;
} stack;
stack mystack;
int push(stack *somestack,int somevalue)
{
if (somestack->top+1>=100)
return 1;
(*somestack).top++;
(*somestack).content[(*somestack).top]=somevalue;
return 0;
}
int pop(stack *somestack, int *oldvalue)
{
if((*somestack).top==0)
{
return 1;
}
*oldvalue=(*somestack).content[(*somestack).top];
return 0;
}
int main()
{
cout<<"n=";
cin>>n;
push(&mystack,n);
int direction=1;
while(mystack.top>=1)
{
if((direction==1)&&(mystack.content[mystack.top]>1))
{
aux=mystack.content[mystack.top];
push(&mystack,aux-1); …Run Code Online (Sandbox Code Playgroud) 我遇到这样的问题: C++:将结构存储在堆栈中
我的代码:
#include <stdio.h>
#include <stack>
#include <iostream>
#include <string>
using namespace std;
struct adresse{
string info;
};
int main(){
string eingabe;
stack<adresse> Stack1;
cout << "Bitte Ausdruck eingeben: " << endl;
getline( cin, eingabe);
adresse* temp;
temp = new adresse;
temp->info = eingabe[0];
Stack1.push(temp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
reference to type 'const value_type'(aka 'const adresse') could not bind to an
lvalue of type 'adresse *'Stack1.push(temp);
Run Code Online (Sandbox Code Playgroud)
怎么了?
谢谢
汤米
如何修复我的代码,以便找到有效的(){} []?现在,它只返回true.
public static boolean isValid(String s){
HashMap<Character, Character> specialChar= new HashMap<>();
specialChar.put('{', '}');
specialChar.put('[',']');
specialChar.put('(',')');
Stack<Character> stk = new Stack<>();
for (int i=0; i<s.length(); i++){
if (specialChar.keySet().contains(s.charAt(i))){
stk.push(s.charAt(i));
}
else if (specialChar.values().contains(s.charAt(i))){
if (!stk.empty()) {
stk.pop();
}
}
}
return stk.isEmpty();
}
System.out.println(isValid("{}{lll}]"));
Run Code Online (Sandbox Code Playgroud) 在x86程序esp集中,堆栈指针ebp是堆指针吗?为什么我们有两个数据结构而不是一个?
什么esi/ edi代表什么?
我读到ADT堆栈可以使用实现
数组
链表
ADT列表
但是当我使用堆栈时,我只是调用堆栈库.这些实现堆栈库中的哪一个使用?
下面的代码片段是故意访问下面的下一个sizeof(int)字节t[4],所以我知道这里犯的错误.我只是作为一个实验来看看编译器如何处理堆栈分配.
int t[5], i;
for (i = 0; i <= 5; i++) {
t[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)
在Windows上执行此代码时,使用GNU C编译器的移植版本,程序总是陷入无限循环.我确信这只会发生,因为t并且i在堆栈上依次分配并t[5]指向与i变量相同的地址.因此,当执行t[5] = 0程序时实际将值设置i为零.
但是,当使用不同版本的GNU C编译器编译它时,我永远不会得到无限循环.地址t[5]与地址不同i.
我的问题是,为什么这种行为不同?我知道你不应该假设这个结果,但是不是堆栈分配应该以同样的方式发生吗?
我真正好奇的是编译器如何管理这些堆栈分配.有填充物吗?订单总是与源代码中的相同吗?显然,这与C标准无关,实现之间存在差异,甚至同一编译器的不同版本也存在差异.我很好奇,尽管在这种特殊情况下可能的结果和考虑因素是什么.
目前在弄清楚为什么这个函数不能通过函数完全初始化main中的指针时遇到一些麻烦.这是我正在尝试做的一个例子.
#include <iostream>
void stuff(int * p)
{
p = new int;
}
int main()
{
int * p;
stuff(p);
*p = 1;
std::cout << *p << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
基本上我试图让它成为一个函数使整数指针访问堆.在那之后,我用间接运算符和中提琴打印出来,我有一个输出.什么不起作用是p不是初始化.我究竟如何使用函数初始化指向堆的指针?