小编huy*_*yen的帖子

C中*ptr + = 1和*ptr ++之间的差异

我刚刚开始学习C,当做一个关于将指针作为函数的参数传递给指针的例子时,我发现了一个问题.

这是我的示例代码:

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

int* allocateIntArray(int* ptr, int size){
    if (ptr != NULL){
        for (int i = 0; i < size; i++){
            ptr[i] = i;
        }
    }
    return ptr;
}

void increasePointer(int** ptr){
    if (ptr != NULL){
        *ptr += 1; /* <----------------------------- This is line 16 */
    }
}

int main()
{
    int* p1 = (int*)malloc(sizeof(int)* 10);
    allocateIntArray(p1, 10);

    for (int i = 0; i < 10; i++){
        printf("%d\n", p1[i]);
    }

    increasePointer(&p1);
    printf("%d\n", *p1);
    p1--;
    free(p1); …
Run Code Online (Sandbox Code Playgroud)

c pointers post-increment

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

在crashlytics android中崩溃base.apk

我的应用程序作为C ++模块(JNI体系结构)和Java模块存在。发布新版本的android应用时出现问题。我以前从未遇到过base.apk崩溃和丢失行的情况。我不知道错误来自哪里(您的代码或其他任何东西?)。下面的Fabric crashlytics中的堆栈跟踪。感谢大家。

Crashed: Thread
0  base.apk                       0xcee52642 (Missing)
1  base.apk                       0xcee5ab31 (Missing)
2  base.apk                       0xcee56e01 (Missing)
3  base.apk                       0xcee57eab (Missing)
4  base.apk                       0xcee3d305 (Missing)
5  libc.so                        0xf59c3a9b (Missing)
6  libc.so                        0xf5a1b406 (Missing)
7  libc.so                        0xf5a0b1cf (Missing)
8  libc.so                        0xf59fcaef (Missing)
9  base.apk                       0xcee477b7 (Missing)
10 base.apk                       0xcee4907f (Missing)
11 base.apk                       0xcee5ab3d (Missing)
12 base.apk                       0xcee56f43 (Missing)
13 base.apk                       0xcee5aaff (Missing)
14 libandroid_runtime.so          0xf42179e4 (Missing)
15 (Missing)                      0x12dfbe1e (Missing)
16 system@framework@boot.oat      0x746ba1cb (Missing)
17 (Missing)                      0x707670de (Missing)
18 (Missing)                      0x7019f11e …
Run Code Online (Sandbox Code Playgroud)

android android-ndk crashlytics

6
推荐指数
0
解决办法
409
查看次数

使用Glide加载和缩放gif图像

我想从我的原始资源(或我的设备存储)加载一个gif图像,并使用Glide将其缩放到所需的宽度和高度.我成功地加载了gif图像,但无法将其缩小.

这是我的加载代码:

Glide.with(getContext()).load(R.raw.abc).override(
                getResources().getDimensionPixelSize(R.dimen.note_icon_width),
                getResources().getDimensionPixelSize(R.dimen.note_icon_height)).into(this);
Run Code Online (Sandbox Code Playgroud)

这是我的xml中的声明视图:

<ImageView
        android:id="@+id/btn_open_warning"
        android:layout_width="48dp"
        android:layout_height="match_parent"
        android:src="@drawable/ic_whatnew_toolbox"
        app:srcSecondState="@drawable/ic_note_menu_disable" />
Run Code Online (Sandbox Code Playgroud)

android android-glide

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

使用C中的regex.h计算匹配数

regex.h在C中使用POSIX正则表达式来计算英语文本片段中短语的出现次数.但返回值regexec(...)仅表示是否找到匹配项.所以我尝试使用nmatchmatchptr找到不同的外观,但是当我打印出匹配时matchptr,我刚收到第一个短语的第一个索引出现在我的文本中.

这是我的代码:

#include <sys/types.h>
#include <regex.h>
#include <stdio.h>

#define MAX_MATCHES 20 //The maximum number of matches allowed in a single string

void match(regex_t *pexp, char *sz) {
    regmatch_t matches[MAX_MATCHES];
    if (regexec(pexp, sz, MAX_MATCHES, matches, 0) == 0) {
    for(int i = 0; i < MAX_MATCHES; i++)
        printf("\"%s\" matches characters %d - %d\n", sz, matches[i].rm_so, matches[i].rm_eo);
    } 
    else {
        printf("\"%s\" does not match\n", sz);
    }
}

int main(int argc, char* argv[]) …
Run Code Online (Sandbox Code Playgroud)

c regex

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

将清除共享智能指针上的呼叫重置

我最近改变了我的原始指针,std::shared_ptr在这样的容器中使用:

std::vector<std::shared_ptr<AbstractPathContainer>> mGeneratedPaths;
Run Code Online (Sandbox Code Playgroud)

当我打电话clear()给这个容器时,它会reset()在每个容器上调用方法std::shared_ptr吗?

c++ smart-pointers reset shared-ptr stdvector

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

在 Common Lisp 中映射数组时,两个缺点指向相同的内存

我有以下功能:

(defun transform-matrix (matrix)
   (let ((res (map 'vector
                   (lambda (x)
                       (map 'vector
                            (lambda (ix)
                                (if ix
                                    '(t 0) ; --> Problem happens here
                                    0))
                            x))
                   matrix)))
    res))
Run Code Online (Sandbox Code Playgroud)

此函数将接受一个二维矩阵,其中每个元素可以是 t 或 nil。然后它将转换 t -> '(t 0) 和 nil -> 0。

结果数组有一个问题是每个 (t 0) cons 现在都指向相同的内存位置。例如,如果我将结果数组保存在res变量中并执行以下操作:

(eq (aref (aref res 0) 0)
    (aref (aref res 1) 1))
Run Code Online (Sandbox Code Playgroud)

*假设 res[0][0] 和 res[1][1] 是 '(t, 0) 节点。

这将导致 T。但这样做是导致 nil:

(eq '(t 0) '(t 0))
Run Code Online (Sandbox Code Playgroud)

我能问一下使创建的 cons 指向相同内存位置的变换矩阵会发生什么吗?

我在 SBCL …

lisp arrays sbcl common-lisp cons

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