我的C++代码,推入一个字符串到我的堆栈
#include <iostream>
#include <stack>
#include "NativeLogger.h"
std::stack<std::string> mystack;
JNIEXPORT void JNICALL
Java_NativeLogger_push(JNIEnv *env, jobject obj,jstring name)
{
std::string s = env->GetStringUTFChars(name, 0);
mystack.push(s);
return;
}
JNIEXPORT void JNICALL
Java_NativeLogger_pop(JNIEnv *env, jobject obj)
{
mystack.pop();
return;
}
当我和Java一起运行时,我收到了一份坠毁报告,有没有办法修复它?
Java运行时环境检测到一个致命错误:
SIGSEGV(0xB)(PC=0x00007F29421A0207,PID=18007,TID=0x00007F2942D3E700)
JRE版本:Java(TM)SE运行时环境(8.0_144-B01)(build 1.8.0_144-B01)Java VM:Java HotSpot(TM)64位服务器VM(25.144-B01混合模式linux-amd64压缩oops)问题帧:C[libc.so.6+0x97207]__libc_malloc+0x197
Java代码:
package recipeNo025;
public class HelloWorld {
public static native void pushString(String s);
public static native String popString();
static {
System.loadLibrary("HelloWorld");
}
public static void main(String[] args) {
HelloWorld.pushString("Hello");
System.out.println(HelloWorld.popString());
}
}
C++代码
#include <iostream>
#include <stack>
#include "jni.h"
#include "recipeNo025_HelloWorld.h"
std::stack<std::string> mystack;
JNIEXPORT void JNICALL Java_recipeNo025_HelloWorld_pushString
(JNIEnv *env, jclass obj, jstring str) {
// we have to get string bytes into C string
const char *c_str;
c_str = env->GetStringUTFChars(str, NULL);
if(c_str == NULL) {
return;
}
std::cout << "Passed string: " << c_str << std::endl;
std::string my_string(c_str);
mystack.push(my_string);
// after using it, remember to release the memory
env->ReleaseStringUTFChars(str, c_str);
}
JNIEXPORT jstring JNICALL Java_recipeNo025_HelloWorld_popString
(JNIEnv *env, jclass obj) {
std::string s = mystack.top();
mystack.pop();
return env->NewStringUTF(s.c_str());
}
执行:
> java -Djava.library.path=:./lib -cp target recipeNo025.HelloWorld
Passed string: Hello
Hello
而且,我会考虑使用单例模式,而不是为堆栈使用全局变量。
我有一个空的整数堆栈,和以下格式的q查询:Push x:在堆栈顶部添加x Pop:移除堆栈顶部top:打印堆栈顶部示例输入:10 Push 5 top Push 6 top Push 3 top Pop top Pop top输出:5 6 3 6 5我将把我的代码放在注释中,因为我不知道怎么放在这里..我知道这是极其错误的但请我需要帮助来改进它
问题内容: 假设我有两个陈述。 哪个是堆栈内存,哪个存储在堆中? 两者之间有什么区别? 创建了多少个对象,内存中的引用如何? 最佳做法是什么? 问题答案: 所有对象都存储在堆中(包括其字段的值)。1个 局部变量(包括参数)始终包含原始值或引用,并存储在堆栈中。1个 因此,对于您的两行: 您将在堆上有两个对象(两个包含的String对象)和两个引用(每个对象一个)在堆栈上(提供且是局部变量)。 (实
主要内容:Stack 类中的属性,Stack 类中的方法在 C# 中,堆栈(Stack)类表示一个后进先出的对象集合,当您需要对项目进行后进先出的访问时,则可以使用堆栈。向堆栈中添加元素称为推入元素,从堆栈中移除元素称为弹出元素。 Stack 类中的属性 下表列出了 Stack 类中一些常用的属性: 属性 描述 Count 获取堆栈中包含的元素个数 IsSynchronized 判断是否同步对堆栈的访问(线程安全) SyncRoot 获取可用于同步对堆
我目前正在编写一个程序,在Javascript中,用户输入一个内缀符号表达式作为字符串,然后将其转换为后缀符号。我很难把每个操作员推到堆栈上。下面是与我的问题相关的代码的两个主要部分。 如果(y==(“| |”-“| |”*“| |”/“| |”(“| |”)){从给定字符串推送到堆栈中,则只比较此行中的第一个字符。我一直用于测试的字符串是“3*5 6”。有没有想过为什么会这样?
本文向大家介绍在C ++中正确使用堆栈和堆?,包括了在C ++中正确使用堆栈和堆?的使用技巧和注意事项,需要的朋友参考一下 堆栈-函数内部声明的所有变量将占用堆栈中的内存。因此,函数内的任何局部变量都位于堆栈中。 堆-这是程序的未使用内存,可用于在程序运行时动态分配内存。因此,如果我们希望某些东西的寿命比声明它的函数的寿命更长,则必须在堆上分配它。 示例 堆内存中的主要问题是碎片,而堆栈中更容易出
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,——也就是说实现了一个先进后出(FILO)的数据结构。 操作 比较和分配堆栈 empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素