0

当我运行它时,我得到一个分段错误?

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

static char* exe;

void usage(void) {
    printf("Usage: %s <number of integers>\n", exe);
}

int main(int argc, char** argv) {
    //This program reads in n integers and outputs them/
    //in reverse order. However, for some odd reason, I/
    //am getting an error when I run it with no command/
    //line arguments. It is supposed to display helpful/
    //usage information out, but instead it segfaults??/
    exe = malloc(50 * sizeof(*exe));
    strncpy(exe, argv[0], 49);

    if(argc != 2) {
        usage();
        exit(0);
    }

    int n = atoi(argv[1]);
    int* numbers = malloc(n * sizeof(*numbers));

    int i;
    for(i = 0; i < n; i++) {
        scanf("%d\n", &numbers[i]);
    }

    for(i = 9; i >= 0; i--) {
        printf("%d:\t%d\n", 10 - i, numbers[i]);
    }

    free(numbers);
    free(exe);
    return 0;
}
4

3 回答 3

7

这是因为 the??/是一个变成 的三元组\,导致你的exe = malloc...行变成了评论的一部分。因此,exe它仍然是 NULL,并且在您取消引用它时会崩溃。

于 2013-05-23T00:37:10.903 回答
0

该变量argv[0]包含一个指向您正在运行的程序名称的指针。您的程序正在尝试读取从该指针开始的 49 个字符或 NULL,以先到者为准。在您的情况下,您可能正在移动到您无权访问的新页面。

于 2013-05-23T00:34:17.377 回答
0

你需要确保你的exe字符串在你之后有一个 NULL 终止符strncpy

尝试在后面添加这一行strncpy

    exe[49] = '\0';
于 2013-05-23T00:35:55.693 回答