如何释放动态分配的内存?
假设输入(假设它是由用户给出)是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中定义一个函数并使用它时,我可以使用它并稍后定义函数或者定义它并在以后使用它.例如,
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) 如果-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) 我对这种行为感到很困惑:
int main(void) {
char *test_string = "test_string";
*test_string = 'a'; //segfaults
return 0;
}
Run Code Online (Sandbox Code Playgroud)
int main(void) {
char test_string[] = "test_string";
*test_string = 'a'; //OK
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我预计它应该有相同的工作,因为N1570, Section 6.3.2.1(p3)声明如下:
除非它是运算
sizeof符,_Alignof运算符或unary &运算符的操作数,或者是用于初始化数组的字符串文字,否则具有类型''数组'类型'的表达式将转换为类型为''指针的表达式键入''指向数组对象的初始元素,而不是左值.
为什么第一个段错?
我有一些非常简单的代码,我遇到了问题.这个程序只是计算一个人的体重(千克)并显示它.但是,每次运行时,打印的答案都会返回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) 这里有一个奇怪的代码:
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,为什么?
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)不起作用.我怎么能解脱这个?
我有这个代码:
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上运行它会改变这个值?
为什么在此代码中指针转移到另一个位置:
#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的新手,我正在尝试打印我自己设置的字符串,但它会打印垃圾.
我知道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)