小编Sou*_*osh的帖子

多次运行程序时如何使用或释放​​动态分配的内存?

如何释放动态分配的内存?

假设输入(假设它是由用户给出)是1000,现在如果我分配1000的内存,在此之后(第二次)如果用户输入为500,我可以重用已经分配的内存吗?

如果用户现在输入值为3000,我该如何使用它?我可以重用已分配的1000块内存,然后创建另外2000块内存吗?或者我应该创建所有3000块内存?

哪一个是可取的?

#include <stdio.h>
#include <stdlib.h>
typedef struct a
{
  int a;
  int b;
}aa;

aa* ptr=NULL;
int main() {
//code
int input=2;
ptr=malloc(sizeof(aa)*input);

for(int i=0;i<input;i++)
{
    ptr[i].a=10;
    ptr[i].b=20;
}

for(int i=0;i<input;i++)
{
    printf("%d  %d\n",ptr[i].a,ptr[i].b);
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

c pointers dynamic-memory-allocation

-1
推荐指数
1
解决办法
70
查看次数

C如何运行?

我刚刚意识到当我在C中定义一个函数并使用它时,我可以使用它并稍后定义函数或者定义它并在以后使用它.例如,

int mult (int x, int y)
{
  return x * y;
}

int main()
{
  int x;
  int y;
  scanf( "%d", &x );
  scanf( "%d", &y );
  printf( "The product of your two numbers is %d\n", mult( x, y ) );
}
Run Code Online (Sandbox Code Playgroud)

int main()
    {
      int x;
      int y;
      scanf( "%d", &x );
      scanf( "%d", &y );
      printf( "The product of your two numbers is %d\n", mult( x, y ) );
    }   

int mult (int x, int y) …
Run Code Online (Sandbox Code Playgroud)

c forward-declaration

-1
推荐指数
1
解决办法
196
查看次数

如果-8和7不为0,为什么输出为假?

如果-8和7不为0,为什么输出为假?我知道它应该是&&但问题是"代码中是否存在问题?它是什么?为什么输出为假?" 请有人帮忙.

#include <stdio.h>


int main ()
{
    if (-8 & 7) 
    {
        printf("Always\n");
    }
    else
    {
        printf("False\n");
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c bitwise-operators

-1
推荐指数
1
解决办法
85
查看次数

Derefence指针并为其赋值

我对这种行为感到很困惑:

int main(void) {
    char *test_string = "test_string";
    *test_string = 'a'; //segfaults
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

int main(void) {
    char test_string[] = "test_string";
    *test_string = 'a'; //OK
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

DEMO

我预计它应该有相同的工作,因为N1570, Section 6.3.2.1(p3)声明如下:

除非它是运算sizeof符,_Alignof 运算符或unary &运算符的操作数,或者是用于初始化数组的字符串文字,否则具有类型''数组'类型'的表达式将转换为类型为''指针的表达式键入''指向数组对象的初始元素,而不是左值.

为什么第一个段错?

c arrays pointers segmentation-fault string-literals

-1
推荐指数
1
解决办法
51
查看次数

C程序每次打印0.00000但返回正确答案

我有一些非常简单的代码,我遇到了问题.这个程序只是计算一个人的体重(千克)并显示它.但是,每次运行时,打印的答案都会返回0.00000,但会返回正确的答案.有人看到我的代码有什么问题吗?

#include <stdio.h>
#include <math.h>

int main(void)
{ 
    float w;
    float const wc=0.454;

    printf("Enter your weight in pounds ");
    scanf("%f", &w); 

    float wk = w * wc;

    printf("Your weight in kilograms is: %f", &wk);

    return(wk);
} 
Run Code Online (Sandbox Code Playgroud)

c floating-point printf

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

c中的奇怪代码

这里有一个奇怪的代码:

const double a[] = {0,1,2,3,4};
int main()
{
    double *p = a;
    printf("%f\n",p[2]); //2.000000
    printf("%f\n",p);    //2.000000
}
Run Code Online (Sandbox Code Playgroud)

它返回2.000000,为什么?

c printf format-specifiers

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

如何在结构中释放char*?

 1| typedef struct container{
 2|     char* abc;
 3| }container;
 4|
 5|
 6| int main(void){
 7|
 8|     container* xyz = malloc(sizeof(container));
 9| 
10|     xyz->abc = malloc(10);
11|     xyz->abc = "abcdefghi\0";
12| 
13|     free(xyz->abc);
14|     free(xyz);
15| }
Run Code Online (Sandbox Code Playgroud)

根据Valgrind的说法,第10行有泄漏,这意味着免费(xyz-> abc)不起作用.我怎么能解脱这个?

c free pointers

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

为什么在使用"free()"之后,内存地址的值总是为0?

我有这个代码:

int * m = (int *)malloc(sizeof(int));
printf("%p %i\n", m, *m);
(*m) = 6;
printf("%p %i\n", m, *m);
free(m);
printf("%p %i\n", m, *m);
Run Code Online (Sandbox Code Playgroud)

我在Linux上运行它.为什么内存地址的值始终为0?

为什么我在Windows上运行它会改变这个值?

c malloc free

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

通过调用另一个函数将指针移动到某个地址

为什么在此代码中指针转移到另一个位置:

#include <stdio.h>

void f(int *p)
{
        int j=2;
        p=&j;
        printf("%d\n%p\n%d\n",*p,&j,p);
}

int main(void)
{
        int *q;
        int m=98;
        q=&m;
        f(q);
        printf("%p ",q);
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

2
0x7ffff5bf1bcc
0x7ffff5bf1bcc
0x7ffff5bf1bc8

我明白,当函数f()与打印值完成j地址 j内存占用j追溯到堆栈,但IMO p应继续指向该位置甚至在功能上与应该打印相同的地址同样.这有什么问题?

c pointers function-calls

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

为什么打印字符串显示垃圾

您好我是C的新手,我正在尝试打印我自己设置的字符串,但它会打印垃圾.

我知道id[4]'\0'这样,我没有设置它.

int main(){
    char id[5];
    printf("Enter a string\n");
    id[0]=1;id[1]=2;id[2]=3;id[3]=4;
    printf("You entered the string %s\n",id); 
}
Run Code Online (Sandbox Code Playgroud)

c initialization

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