相关疑难解决方法(0)

malloc程序出错

#include<stdio.h>
#include<stdlib.h>

// using malloc
void main(){

    int n,i;
    printf("Enter size of n \n");
    scanf("%d",&n);

    int *A = (int*)malloc( sizeof(int) * n );

/*  for(i=0;i<n;i++){
        A[i] = i+1;
    }*/

    printf("Values in Array \n");
    for(i=0;i<n;i++){
        printf("%d ",A[i]);
    }
    printf("\n");

}
Run Code Online (Sandbox Code Playgroud)

在这段代码中我必须得到输出作为垃圾值,但我得到全零为什么? (为什么我期待垃圾值是malloc默认分配是垃圾值)

抱歉英语不好......

c

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

在C中没有得到NULL指针错误

我故意试图在C中获取NULL指针,但我没有这样做.这是我编码的内容:

int main(void) {
  int x; //UNINITIALIZED so that it will represent "nothing"
  int *null_test = &x;
  printf("This should be null   %p \n", null_test);
}
Run Code Online (Sandbox Code Playgroud)

但它给了我一个地址:0x7fd96c300020这似乎NULL不像我希望的那样.

为什么?我甚至没有初始化x但仍然不是null?

c pointers

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

Valgrind将指针与NULL进行比较

我正在使用Valgrind来调试我的代码,当我struct通过比较来测试是否初始化时,我会收到警告NULL.

void main()
{
    int *unassignedPointer;
    if(unassignedPointer == NULL)
        printf("This Pointer is NULL\n");
}
Run Code Online (Sandbox Code Playgroud)

此代码编译并运行,但是当通过Valgrind运行时,它会发出警告:条件跳转或移动取决于未初始化的值.与之比较的重点NULL是确定它是否已初始化.这是一种危险的做法,还是应该忽略这些警告?

c valgrind

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

2D数组:当我将ptr声明为int ptr [4] [4]时,为什么ptr和* ptr相同?

我正在测试一些代码,以了解如何在c中实现2d数组。然后我遇到了以下问题。

代码是:

int main(){
   int a[4][4];
   printf("a: %p, *a: %p, **a: 0x%x\n",a,*a,**a);
}
Run Code Online (Sandbox Code Playgroud)

我用32位ubuntu gcc编译了这个

结果是:

a:0xbf9d6fdc,* a:0xbf9d6fdc,** a:0x0

我期望a和的值不同*a,但是它们是相同的。

  1. 为什么a*a在这种情况下相同?是不是a一个int**类型?

  2. 那么,*操作员的作用是什么*a

c arrays pointers

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

C/C++ 中未初始化的变量会怎样?

摘自李普曼的《C++ Primer》,

当我们定义一个变量时,我们应该给它一个初始值,除非我们确定在该变量用于任何其他目的之前该初始值将被覆盖。如果我们不能保证变量在被读取之前会被重置,我们应该初始化它。

  1. 如果在操作中使用未初始化的变量会发生什么?它会崩溃/代码会无法编译吗?

    我在互联网上搜索了相同的答案,但有不同的“说法”。因此出现以下问题,

  2. C 和 C++ 标准在处理未初始化变量的方式上是否有所不同?

  3. 对于类似的疑问,如何以及在哪里可以找到“官方”答案?对于业余爱好者来说查找 C 和 C++ 标准实用吗?

c c++ initialization

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

添加整数或双精度时的C++奇怪输出

我有一个问题,在c ++中添加数字类型并且无法弄清楚为什么会发生这种情况,我希望当我输入3个保龄球分数时我会得到9或9.00,而我得到像3.31748e + 258这样的疯狂,我在做什么错误?任何帮助都会有很长的路要走!

#include<iostream>
#include<cmath>
#include <iomanip>
#include <cstdio>   
#include <cstdlib>

using namespace std;

int main()
{
/*Coordinate variables*/
double bowlTotal;
double bowlScore;  
const int FIVE_PLAYERS = 5;

for( int players = 0; players < FIVE_PLAYERS ; players++ )
{
    cout << "Player " << players + 1 << endl << endl;

    for( int games = 0; games < 3; games++ )
    {

     double score;
     score = 0;

     cout << "Please enter score for game #" << games + …
Run Code Online (Sandbox Code Playgroud)

c++ variables double integer

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

为什么在增加指针的整数值时会得到一个随机数?

我是一名专业的 C# 程序员,但我对 C++ 很陌生。我对指针的基本概念很好,但我一直在玩。您可以通过将指针转换为 来获取指针的实际整数值int

int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
Run Code Online (Sandbox Code Playgroud)

这是有道理的;这是一个内存地址。但是我可以移动到下一个指针,并将其转换为int

int i = 5;
int* iptr = &i;
int ptrValue = (int)iptr;
int* jptr = (int*)((int)iptr + 1);
int j = (int)*iptr;
Run Code Online (Sandbox Code Playgroud)

我得到了一个看似随机的数字(虽然这不是一个好的 PSRG)。这个数字是多少?它是同一进程使用的另一个号码吗?它可能来自不同的过程吗?这是不好的做法,还是不允许的?如果没有,这有什么用吗?这有点酷。

c++ int pointers memory-address

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

在C++中,是访问未初始化的数组未指定的行为还是未定义的行为?

例如,在以下代码中:

int myarray[3];
int x = myarray[1];
Run Code Online (Sandbox Code Playgroud)

代码是否保证在恒定时间内成功执行,x具有一些整数值?或者编译器是否可以跳过为这个完全/发出代码发出代码来启动GNU Chess并仍然符合C++标准?

这在类似于数组的数据结构中很有用,但可以在恒定时间内初始化.(对不起,我没有Aho,Hopcroft和Ullman的副本,所以不能查找名字.)

c++ unspecified-behavior

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

为什么在单行上声明变量会产生意想不到的结果?

我编写了一个简单的时钟,发现虽然小时和秒都可以,但如果我在一行上声明变量,分钟就不行了(分钟从 16 开始,而不是像预期的那样从 0 开始)。

如果我在单独的行上声明变量,问题就解决了。我还是很好奇,有人知道为什么吗?

这是代码:

#include <stdio.h>
#include <windows.h>
//h=hours, m=minutes, s=seconds.
int main(){
    int h, m, s = 0; //THIS IS THE LINE: WHY "m" STARTS AT 16 AND NOT 0?
    int delay = 1000;
    while(1){
        s++;
        if(s>59){
            m++;
            s=0;
        }
        if(m>59){
            h++;
            m=0;
        }
        if(h>12){
            h=1;
        }
        printf("\n %02d:%02d:%02d", h, m, s);
        Sleep(delay);
        system("cls");
    }
}
Run Code Online (Sandbox Code Playgroud)

c

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

C 中数组初始化的差异

我有这个代码:

#include <stdio.h> 
int main()
{
    int arr2[5];
    arr2[0] = 0;
    arr2[1] = 1;
    arr2[2] = 2;
    arr2[3] = 3;
    int arr3[5] = {1, 2, 3, 4};
}
Run Code Online (Sandbox Code Playgroud)

当我打印每个数组的第五个位置时,我得到不同的结果:

printf("Fifth: %d\n", arr2[4]); // Prints Random number 
printf("Fifth: %d\n", arr3[4]); // Prints Zero!
Run Code Online (Sandbox Code Playgroud)

输出:

Fifth: -858993460
Fifth: 0
Run Code Online (Sandbox Code Playgroud)

我知道第一个是指向内存中第五个位置的指针,第二个是数组如何用 0 初始化。我不明白为什么他们给我两个不同的值。在这两种情况下我都将数组的大小设置为 5;为什么会发生这种情况?

c arrays pointers

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