相关疑难解决方法(0)

我在哪里可以找到当前的C或C++标准文档?

对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.

谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.

要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:

  • C89
  • C99
  • C11
  • C++ 98
  • C++ 03
  • C++ 11
  • C++ 14

c c++ standards c++-faq

394
推荐指数
8
解决办法
12万
查看次数

malloc(0)中有什么意义?

刚看到这段代码:

artist = (char *) malloc(0);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么会这样做?

c malloc

115
推荐指数
5
解决办法
6万
查看次数

我可以使用比使用malloc()分配的内存更多的内存,为什么?

char *cp = (char *) malloc(1);
strcpy(cp, "123456789");
puts(cp);
Run Code Online (Sandbox Code Playgroud)

gcc(Linux)和Visual C++ Express上的输出是"123456789",这是否意味着当有空闲内存时,我实际上可以使用比我分配的内容更多的内容malloc()

为什么malloc(0)不导致运行时错误?

谢谢.

c

34
推荐指数
3
解决办法
7422
查看次数

当我们引用非静态数据成员时,分段错误是否是实际未定义的行为

我已经阅读了以下规则,并且我一直在尝试编写一个反映一个例子的例子.规则来自3.8/5 N3797:

在对象的生命周期开始之前但是在对象将占用的存储之后,或者在对象的生命周期结束之后以及在重用或释放对象占用的存储之前,任何指向存储的指针之前可以使用对象将位于或位于的位置,但仅限于有限的方式.对于正在建造或销毁的物体,见12.7.否则,这样的指针指的是已分配的存储(3.7.4.2),并且使用指针就像指针的类型一样void*是明确定义的.允许通过这样的指针的间接,但是得到的左值可以仅以有限的方式使用,如下所述.如果出现以下情况,该程

[...]

- 指针用于访问非静态数据成员或调用对象的非静态成员函数,或

[...]

我写的例子:

#include <iostream>
#include <typeinfo>

using std::cout;
using std::endl;

struct A
{
    int b = 5;
    static const int a = 5;
};

int main()
{
    A *p = (A*)0xa31a3442;
    cout << p -> a; //1, Well-fromed, there is no compile-time error
    cout << p -> b; //2, Segmentation fault is producing
}
Run Code Online (Sandbox Code Playgroud)

这是真的,在的情况下//1很好地形成的,不会造成任何UB的,但//2产生的段错误,这是UB

c++ pointers undefined-behavior

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

添加额外的int时,C程序崩溃

我是C新手并使用Eclipse IDE以下代码可以正常工作:

#include <stdio.h>
#include <stdlib.h>
#include <String.h>
int main()
{
    char *lineName;
    int stationNo;
    int i;
    while (scanf("%s (%d)", lineName, &stationNo)!=EOF) {
        for (i=0; i<5 ; i++ ){
            printf("%d %d",i);
        }
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输入:

Green (21)

Red (38)
Run Code Online (Sandbox Code Playgroud)

输出:

Green (21)

Red (38)
0123401234
Run Code Online (Sandbox Code Playgroud)

但是,只需添加一个新的int:

#include <stdio.h>
#include <stdlib.h>
#include <String.h>
int main()
{
    char *lineName;
    int stationNo;
    int i,b=0;
    while (scanf("%s (%d)", lineName, &stationNo)!=EOF) {
        printf("%d",b);
        for (i=0; i<5 ; i++ ){
            printf("%d",i);
        }
    }
    return …
Run Code Online (Sandbox Code Playgroud)

c

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

标签 统计

c ×4

c++ ×2

c++-faq ×1

malloc ×1

pointers ×1

standards ×1

undefined-behavior ×1