小编Abu*_*akr的帖子

使用类从外部模块加载资源文件

我在尝试从外部模块的资源文件夹加载资源文件时遇到困难。我正在使用 IntelliJ,我们的项目是使用 Maven 构建的。

使用模块之前的原始代码是这样的:

getClass().getResourceAsStream(rulesFile)

这现在产生了null结果。


模块的结构如下:

client
    - java
        - org.example.client
            - Controller.java

data
    - java
        - ...
    - resources
        - org.example.data.files
            - rulesFile

Run Code Online (Sandbox Code Playgroud)

在模块中client

getClass().getResourceAsStream(rulesFile) 不起作用。

但是,如果我尝试去做ModuleLayer.boot().findModule("data").get().getResourceAsStream(rulesFile),那么它工作正常。

我的问题是,是否可以使模块内部rulesFile可见,以便可以使用普通的类加载器?我想避免必须明确指定它来自的模块名称,因为在其他地方使用了从模块加载文件的类似代码。Controller.javaclientdata

我有哪些选项可以避免显式给出模块名称?

我尝试将以下内容添加到data模块文件中,但没有成功:

opens org.example.data.files to client

谢谢您的帮助!

java

5
推荐指数
1
解决办法
200
查看次数

free()然后再次malloc()

我在减少指针分配的内存方面遇到了困难.这是完成的,因为这个指针指向一个char数组,它将存储字节,但字节数可以不同.

使用以下结构:

struct packet {
   unsigned char *data
}
Run Code Online (Sandbox Code Playgroud)

在我的代码中,我首先为数据包和数据分配内存:

struct packet *pack;
pack = malloc(sizeof(struct packet));
pack->data = malloc(MAXSIZE);
Run Code Online (Sandbox Code Playgroud)

MAXSIZE是一次读取的最大大小(256字节).

使用缓冲区读取文件并使用:将数据设置到缓冲区后pack->data= &buffer,我读取文件中的剩余字节(使用stat()计算并每次减去MAXSIZE,直到我们剩下少于MAXSIZE.)

此时,我想让数据指针分配比MAXSIZE更少的内存,因为数据不会那么大,我尝试以下代码但它失败并导致"核心转储":

free(pack->data);
printf("Memory freed.") // This never gets printed so there is an issue with free...
pack->data = malloc(remaining_size);
Run Code Online (Sandbox Code Playgroud)

remaining_size是正确计算的,所以我知道它应该正确分配.我采取了错误的做法吗?我也尝试了,realloc()但我得到了相同的结果.

非常感谢一些帮助,这是一个普遍的问题,但我需要一些类似于学校项目的工作,需要释放所有内存.如果我能解决这个问题,我应该能够释放内存.谢谢!

编辑:如果我删除free()调用,再次只是malloc(),它可以工作,但我相信这是错误的方法,因为旧的分配空间永远消失,我永远不会释放它.

c memory pointers memory-management

2
推荐指数
1
解决办法
944
查看次数

标签 统计

c ×1

java ×1

memory ×1

memory-management ×1

pointers ×1