2017-06-25 49 views
-1
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main(int argc, char *argv[]) 
{ 
    char *first, *second, *third; 
    if (argc < 2) 
    { 
     printf("usage: ./q1 str\n"); 
     exit(1); 
    } 
    first = (char*)malloc(660); 
    second = (char*)malloc(220); 
    third = (char*)malloc(120); 
    strcpy(second, argv[1]); 
    printf("locations of the 1st, 2nd, and 3rd memory trunks are %p, %p, %p \n", first, second, third); 
    printf("contents of the 2nd memory trunk are %s\n", second); 
    free(first); 
    free(second); 
    free(third); 
} 

因爲我在編譯這個程序時剛剛C,所以它只打印「usage:./q1 str」。根據C語言,這個程序在退出結束(1)。這是否意味着,第一,第二和第三個內存塊的分配和鏈接到程序?如果他們被分配和鏈接說明他們如何分配? 鍛鍊需要用於每個存儲塊和在存儲器塊中的值的字節數header.What意思?說明第一,第二和第三塊內存是如何在程序中分配和鏈接的

+0

這似乎是一個家庭作業的問題。我們不在這裏爲你做這件事。閱讀[問]你希望提供什麼,哪些問題是受歡迎的,哪些不是。 – Olaf

回答

0

它打印因爲這個代碼塊是:

if (argc < 2) 
{ 
    printf("usage: ./q1 str\n"); 
    exit(1); 
} 

這意味着你正在執行的程序一樣./q1,你應該按照使用說明來代替。

這是否意味着第一,第二和第三塊內存被分配並鏈接到程序中?

!你的程序執行exit(1),因此它的終止和代碼的其餘部分(exit()不會被執行之後。

0

如果你運行你的程序作爲./q1 mystr,它會工作,你需要通過被接受的命令行參數由argv存儲在該數組的第二個元素中

-1

如果exit(1);行被執行,那麼它將從main返回,錯誤代碼爲1,表示程序未成功執行,所以主函數是不執行到最後,並沒有內存分配

malloc的解釋可以在這裏找到: http://www.cplusplus.com/reference/cstdlib/malloc/

相關問題