我总是怀疑这个疑问.请看以下程序:
#include <stdio.h>
char * function1(void);
int main()
{
char *ch;
ch = function1();
printf("hello");
free(ch);
return 0;
}
char* function1()
{
char *temp;
temp = (char *)malloc(sizeof(char)*10);
return temp;
}
Run Code Online (Sandbox Code Playgroud)
我在这里泄漏记忆吗?该程序不会因为某些警告而崩溃:
prog.c: In function ‘main’:
prog.c:11: warning: implicit declaration of function ‘free’
prog.c:11: warning: incompatible implicit declaration of built-in function ‘free’
prog.c: In function ‘function1’:
prog.c:19: warning: implicit declaration of function ‘malloc’
prog.c:19: warning: incompatible implicit declaration of built-in function ‘malloc’
Run Code Online (Sandbox Code Playgroud)
打印你好.
我只是C.so的初学者请帮助我理解在function1.does中返回语句之后发生了什么真的释放了funtion1中分配的内存?
我有两个multimaps.i想要创建一个新的multimap,它在给定的两个multimaps中具有公共键值对:
例如:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main ()
{
multimap<std::string, std::string> m;
multimap<std::string, std::string> n;
m.insert(multimap<string,string>::value_type("1-2","1-1"));
m.insert(multimap<string,string>::value_type("1-2","1-2"));
m.insert(multimap<string,string>::value_type("1-2","1-3"));
m.insert(multimap<string,string>::value_type("1-2","1-4"));
m.insert(multimap<string,string>::value_type("1-3","2-1"));
m.insert(multimap<string,string>::value_type("1-3","21-1"));
m.insert(multimap<string,string>::value_type("1-3","21-2"));
n.insert(multimap<string,string>::value_type("1-2","1-1"));
n.insert(multimap<string,string>::value_type("1-2","1-2"));
n.insert(multimap<string,string>::value_type("1-2","1-5"));
n.insert(multimap<string,string>::value_type("1-2","1-7"));
n.insert(multimap<string,string>::value_type("1-3","2-1"));
n.insert(multimap<string,string>::value_type("1-3","21-4"));
n.insert(multimap<string,string>::value_type("1-3","21-2"));
cout<<"multimap of m"<<endl;
cout<<"--------------"<<endl;
for(multimap<string,string>::iterator i=m.begin();i!=m.end();i++)
cout <<i->first<<" "<<i->second<<endl;
cout<<"multimap of n"<<endl;
cout<<"--------------"<<endl;
for(multimap<string,string>::iterator i=n.begin();i!=n.end();i++)
cout <<i->first<<" "<<i->second<<endl;
}
Run Code Online (Sandbox Code Playgroud)
这导致:
multimap of m
--------------
1-2 1-1
1-2 1-2
1-2 1-3
1-2 1-4
1-3 2-1
1-3 21-1
1-3 21-2
multimap of n
--------------
1-2 1-1
1-2 …Run Code Online (Sandbox Code Playgroud) 我写了一个示例程序:
#include<iostream>
#include<set>
#include<conio.h>
using namespace std;
int main()
{
set<int> myset[4];
char *str[4]={"1-2-3-4","3-4-34-3","7-45-35-3","67-45466-3633-3"};
for(int i=0;i<4;i++)
{
char *data;
strcpy(data,str[i]);
char *pch;
pch = strtok (data,"-");
for(int j=0;pch != NULL&&j<4;j++)
{
myset[j].insert((int)strtol(pch, NULL, 10));
pch = strtok (NULL, "-");
}
}
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
该程序给出了分段错误
myset[j].insert((int)strtol(pch, NULL, 10));
Run Code Online (Sandbox Code Playgroud)
谁能告诉我为什么?
我尝试了一个小测试:替换x为x|y|z|a,w
所以我试过:
echo "x|y|z|a" | perl -lne '@arr=split /|/;$arr[0]='w';$_=join "|",@arr;print $_;'
Run Code Online (Sandbox Code Playgroud)
它给了我:
> echo "x|y|z|a" | perl -lne '@arr=split /|/;$arr[0]='w';$_=join "|",@arr;print $_;'
w|||y|||z|||a
>
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,它提供了3个字段分隔符而不是1个.任何人都可以告诉我我哪里错了?
我写了一个小测试脚本.
#!/usr/bin/perl -w
use strict;
my $head="a b";
sub test
{
my @arr=split / /,@_;
print $arr[0];
}
test $head;
Run Code Online (Sandbox Code Playgroud)
而输出是1我实际上期待的a.谁能告诉我我哪里错了
我编写了一个小测试应用程序,它生成一个 GUI,如下所示:

我对 gtk 编程非常陌生。在这个小 GUI 中,有一个树视图,当我尝试扩展它时,它跨越了可视窗口大小。我只想向这个窗口添加一个滚动条(垂直),它显示treeview 并且我想在滚动条向上或向下移动(逐步)时捕获该滚动条的事件。任何人都可以帮助我如何将此功能添加到我当前的小 GUI 中。不幸的是,我没有在网上找到任何关于这个的好材料,这促使我提出这个问题。
我想这对于真正的 gtk 程序员来说应该是一件容易的事。
下面是相同的代码:
#include <gtk/gtk.h>
enum
{
COLUMN = 0,
NUM_COLS
} ;
void on_changed(GtkWidget *widget, gpointer statusbar)
{
GtkTreeIter iter;
GtkTreeModel *model;
char *value;
if (gtk_tree_selection_get_selected(
GTK_TREE_SELECTION(widget), &model, &iter)) {
gtk_tree_model_get(model, &iter, COLUMN, &value, -1);
gtk_statusbar_push(GTK_STATUSBAR(statusbar), gtk_statusbar_get_context_id(GTK_STATUSBAR(statusbar), value), value);
g_free(value);
}
}
static GtkTreeModel *
create_and_fill_model (void)
{
GtkTreeStore *treestore;
GtkTreeIter toplevel, child;
treestore = gtk_tree_store_new(NUM_COLS,
G_TYPE_STRING);
gtk_tree_store_append(treestore, &toplevel, NULL);
gtk_tree_store_set(treestore, &toplevel, COLUMN, "Scripting languages", -1);
gtk_tree_store_append(treestore, &child, …Run Code Online (Sandbox Code Playgroud) 我创建了一个简单的表格,其中包含如下数字:
CREATE TABLE saleshist (q1 NUMBER);
INSERT INTO saleshist VALUES (100);
INSERT INTO saleshist VALUES (101);
INSERT INTO saleshist VALUES (102);
INSERT INTO saleshist VALUES (103);
select * from saleshist
Run Code Online (Sandbox Code Playgroud)
上面的选择显示了一个单列,如:
100
102
102
103
Run Code Online (Sandbox Code Playgroud)
我希望看到如下输出:
100,101,102,103
Run Code Online (Sandbox Code Playgroud)
是的,它是单个行中的逗号分隔列值作为单个值。这只是我想到的一个例子,列值可以有很多。我想 UNPIVOT 可以做到这一点但我无法正确理解。我想到的解决方案的最佳方法是编写一个 perl 脚本并执行查询,然后将行转换为以逗号分隔的列。有没有一种直接的方法可以在 sql 本身中做到这一点?
当我试图在一个简单的c文件中运行编译并执行此语句时:
main(){ printf("%d");}
Run Code Online (Sandbox Code Playgroud)
在HP上,它给了我64,在AIX上它给了我804359524.
谁能告诉我这是什么行为.
我在源文件(*.c)中使用了一些宏.
在编译期间或从库中是否有任何方法可以确定从中解析此特定宏的确切头文件?
问题是我们在某些头文件中使用宏#defined为10,但代码中接收的值为4.因此,我们不想去检查所有dep文件,而是想知道有一些直接的方法来识别宏从中解析出来的源.
这可能是一个简单的查询.
当我们创建一个线程时,我们将(void*)t作为参数传递给函数PrintHello.we正在将tid中的指针threadid中的值复制(将其设置为long),这又是一个long变量.我很困惑参数传递.这是一个通过引用传递或通过值传递.所有这是正确的吗?
(value *)t.它究竟通过了什么价值?
long t;
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
Run Code Online (Sandbox Code Playgroud)
请帮我避免我的困惑:(