小编mal*_*ala的帖子

将一个指针内容复制到另一个

我以为我读过某个地方,当使用指针并且我们想要将一个内容复制到另一个时,有两个选项:

  • 使用memcpy或
  • 只是给他们分配=?

然而在下面的例子中,我只是通过为两个指针分配内存来测试它,然后分配第二个,先改变..然后我的第二个指针的输入也在改变.我做错了什么:/.

typedef struct {

    int a;
    int b;
    int c;
} my_struct;


int main(int argc, char** argv) {

    my_struct* first = malloc(sizeof(my_struct));   
    first->a = 100; first->b = 101; first->c = 1000;

    my_struct* bb = malloc(sizeof(my_struct));  

    printf("first %d %d %d\n", first->a, first->b, first->c);
    bb = first;
    printf("second %d %d %d\n", bb->a, first->b, bb->c);


    first->a = 55; first->b = 55; first->c = 89;
    printf("second %d %d %d\n", bb->a, first->b, bb->c);
}
Run Code Online (Sandbox Code Playgroud)

c pointers

11
推荐指数
3
解决办法
4万
查看次数

将文件内容加载到内存中,C

我将处理非常大的文件,我只想将内容部分加载到内存中。所以我想知道命令是否:

 FILE* file=fopen("my/link/file.txt", "r");  
Run Code Online (Sandbox Code Playgroud)

将整个文件内容加载到内存中还是只是指向内容的指针?打开文件后,我用来fgets()逐行读取文件。那么fwrite()呢?我每次写东西时都需要打开和关闭文件,这样它就不会过载或在后台管理吗?

另一件事,是否有一个像“-time”这样的不错的 bash 命令可以告诉我我执行的程序的最大峰值内存?我正在使用 OSx。

c file-io fopen

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

C错误:free():无效的下一个大小(快):, OSX,Linux上的C程序的不同行为

这个问题已被问过好几次,但既然我认为我的情况是我认为更具体:

我有一个C程序,它在我的OSX系统上完美运行(太大而无法复制).我已经用Valgrind对它进行了测试,并且我没有错过任何frees/mallocs /或写入,所有问题都得到了100%的解决.

当我现在在外部服务器上通过ssh运行程序时,当我运行时没有那么多数据(参见下面的代码,my_length <1000),它没有任何问题.但是使用更大的数据集,使用Linux终端我收到此错误:

 *** Error in `./a.out': free(): invalid next size (fast): 0x00000000016b9ed0 ***
 ======= Backtrace: =========
 /lib64/libc.so.6[0x3e50475cff]
 /lib64/libc.so.6[0x3e5047cff8]
 ./a.out[0x41083c]
 ./a.out[0x402374]
 /lib64/libc.so.6(__libc_start_main+0xf5)[0x3e50421d65]
 ./a.out[0x400e79]
 ======= Memory map: ========
  00400000-00418000 r-xp 00000000 00:4d 89038   
Run Code Online (Sandbox Code Playgroud)

[...]

当我在Solaris上运行它时,它会抱怨:

malloc failed
Run Code Online (Sandbox Code Playgroud)

在我分配三维数组的一行:

 int ***A, ***B, ***C;
 A = malloc(sizeof(int**)*2); B = malloc(sizeof(int**)*2); C = malloc(sizeof(int**)*2);
 int i;
 for (i = 0; i < 2; i++) {
    A[i] = malloc(sizeof(int*)* my_length);
    B[i] = malloc(sizeof(int*)* my_length);
    C[i] = malloc(sizeof(int*)* my_length);
    for (j = 0; j …
Run Code Online (Sandbox Code Playgroud)

c linux macos

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

C中的递归结构定义,错误"前向声明"

我想将我的结构声明为递归结构.所以我到现在为止做的是这样的:

 typedef struct {

 char *string;
 struct my_struct **children; //I want a list of children, therefore pointer to pointer
 int child_num;
 } my_struct;
Run Code Online (Sandbox Code Playgroud)

但是当我尝试像这样初始化它时:

my_struct *alig;
alig = malloc(sizeof(my_struct)*1);
alig->child_num = 5;
alig->string = malloc(sizeof(char)*9);
strncpy(alig->string, "AAACGTCA", 8);

alig->children = malloc(sizeof(my_struct*)*alig->child_num);

int j;
for (j = 0; j < alig->child_num; j++) {
    alig->children[j] = malloc(sizeof(my_struct)*1);
    alig->children[j]->string = malloc(sizeof(char)*9); // *********error ********
}
Run Code Online (Sandbox Code Playgroud)

我收到错误:"./ structurs.h:27:13:注意:'struct my_struct'的前向声明"

以及标记行处的此错误:main.c:56:22:错误:类型'struct my_struct'的定义不完整

有谁现在我的错误是??

c recursion

0
推荐指数
1
解决办法
66
查看次数

在简单的cpp类构造函数中处理错误

我正在努力学习C++(目前正与C合作),我正在花时间寻找互联网以获得良好的教程(也许有人对我有好的建议).

但我找不到有关错误处理标准方法的信息.

所以假设我有一个像这样的简单类(我的example.h文件):

const int MAX = 1000;
class Example {
    public: 
       Example(int x);
    private:
       int x_val;
}
Run Code Online (Sandbox Code Playgroud)

所以我只想检查,当创建类的对象时,如果允许给定的坐标,如果它高于允许的,则中止程序?

所以在.cpp文件中:

Example::Example(int x){

   /*So is it common, to do something like this:*/
   if (x >= MAX){
       std::cerr << "Error while generating example object" << std::endl;
       return 0;
   }

   /*or is this more convenient:*/
   throw std::invalid_argument( "received to high value" );

   x_val = x;
}
Run Code Online (Sandbox Code Playgroud)

c++

0
推荐指数
1
解决办法
43
查看次数

标签 统计

c ×4

c++ ×1

file-io ×1

fopen ×1

linux ×1

macos ×1

pointers ×1

recursion ×1