函数func
采用void参数buf
。我想通过调用buf
将1到10之间的值插入func
。但是,buf
和func
的{{1}}地址不同,打印值不是1到10.任何人都可以帮我解决这个问题吗?谢谢!
main
答案 0 :(得分:2)
将startEdit()
cd('/')
mod = 'loopback'
module = cmo.createJMSSystemResource(mod)
module.setTargets(cmo.getClusters())
server = module.createForeignServer('loopback_server')
server.setDefaultTargetingEnabled(true)
server.setInitialContextFactory('weblogic.jndi.WLInitialContextFactory')
# When we don't populate connection parameters (URLs, user, password),
# WebLogic defaults to connecting to the current cluster, which is exactly what we need!
topicLink = server.createForeignDestination('A_to_B')
topicLink.setLocalJNDIName('jms/B/topic')
topicLink.setRemoteJNDIName('jms/A/topic')
cfLink = server.createForeignConnectionFactory('A_to_B_cf')
cfLink.setLocalJNDIName('jms/B/connectionfactory')
cfLink.setRemoteJNDIName('jms/A/connectionfactory')
activate()
设置为指向堆栈内存的指针(即buf
)。由于一旦程序离开my_array
它就不再有效,这不起作用。
要么使用动态内存,要么需要明确释放它。另一种选择是在外部创建内存,只在func
内填充:
func
除此之外:永远不要使用#include <stdio.h>
void func(char* buf, int n)
{
for(int i = 0; i < n; i++) {
buf[i]=i;
}
}
int main()
{
char buf[10];
func(buf, sizeof(buf));
for(int i=0; i < sizeof(buf); i++) {
printf("%d\n", buf[i]);
}
}
,除非你有充分的理由!
答案 1 :(得分:0)
你需要在你的函数之外分配你的内存,否则它在你返回时将无效,因为它是在堆栈上分配的。
void func(int n, int *buf);
int main()
{
const int n = 10;
int my_array[n];
func(n, my_array);
for(int i = 0; i < n; i++){
printf("%d\n", ((int*)my_array)[i]);
}
printf("in main, after func: %p\n", my_array);
}
void func(int n, int *buf)
{
for(int i = 0; i < n; i++){
buf[i] = i;
}
}